2009-10-02 9 views
5

W jaki sposób mogę umiędzynarodowić wypowiedzieć tabelę kategorii (z kolumną z nazwą) na różne języki. Co powiesz na tabelę produktów (składającą się z kolumn nazwy i opisu). Jaki jest najlepszy sposób na internacjonalizację zawartości tych tabel baz danych za pomocą Ruby on Rails?Jak umiędzynarodowić zawartość ruby ​​na szynach?

Odpowiedz

6

Brałeś okiem na: http://guides.rubyonrails.org/i18n.html

Opisuje dość szczegółowo, jak umiędzynarodowienie aplikacji i

„zapewnia łatwy w obsłudze i elastyczny ramy tłumacząc swoją aplikacja do pojedynczego niestandardowego języka innego niż angielski lub do zapewniającego wsparcie w wielu językach w aplikacji . "

Przydatne linki:

+2

Wszystkie te odniesienia nie mówią o tłumaczeniu zawartości bazy danych ...jak klejnot Globalize3 –

2

Jeśli chcesz przechowywać wartości dla różnych języków w db obok standardowych szynach i18n (yml), możesz zrobić coś takiego:

Produkty nazwa tabeli pole:

  • name_en
  • name_fr
  • name_nl

Fetch prawidłową wartość:

def i18n_db_value(object, attribute) 
    object.send("#{attribute.to_s}_#{I18n.locale}") if object 
end 
0

Można nadpisać Metoda "nazwa" w kategorii modelu umożliwia wyszukanie poprawnego tłumaczenia w innej tabeli.

Tak więc, w tabeli kategorii, powinieneś mieć w polu "nazwa" przetłumaczony domyślny język, na przykład "Inne". A następnie wyszukaj "Inne" w tabeli:

transtations table 

en_text "Other" <--- You search this (default language) 
es_text "Otros" ---> You retrun this 
ca_text "Altres" ---> or this 


# Category table 
class Category < ActiveRecord::Base 
    def name 
    Translation.translate(read_attribute("name")) 
    end 
end 

# Your transltation model 
class Translation < ActiveRecord::Base 

    def self.translate(text) 

    locale=I18n.locale 
    if locale!="en"  # default locale: what is on the table "category" 

     trad=self.find_by_en_text(text) 
     if trad 
      return eval("trad.#{locale}_text") 
     end 
    end 

    return text 

    end 

end