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
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:
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
„Store wiele wersji treści w modelu i mieć jedną witrynę "vs. „magazynu tylko jedna wersja treści w modelu, ale mają wiele witryn”
Na RailsCasts jest ładny artykuł o, używając gem nazwie Globalize3. Że tylko pozwalają określić, które będą tłumaczone modele i zarządzać tłumaczyć tabel dla każdego modelu i działa podobnie jak i18n jest statycznych stron ...
Spójrz
http://railscasts.com/episodes/338-globalize3?view=asciicast
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
Wszystkie te odniesienia nie mówią o tłumaczeniu zawartości bazy danych ...jak klejnot Globalize3 –