Вот несколько советов или рекомендаций, которые я отметил, работая над интернационализацией Rails-приложения . (Возможно, что некоторые из них уже устарели).
Прежде чем я попаду в список, вот несколько пояснений между локализацией и переводом, которые были мне полезны:
Определения:
Локализация приложений и перевод моделей - это отдельная задача. Выясните, какой из них (или оба) вам нужен.
Как я их здесь использую:
Пример. Дайте мне французский перевод (модельный перевод) ресурса на моем испанском сайте (локализация приложения)
Я использую Глобализация для переводов моделей.
Полезные советы / рекомендации:
Некоторые из перечисленных ниже являются просто полезными советами при работе в контексте Rails + Globalize, некоторые из них могут быть чем-то большим ... возможно, лучшими практиками.
I18n.locale
указывает и устанавливает язык приложения. При использовании Globalize Globalize.locale
относится и устанавливает языковой стандарт для переводов модели / данных.
Установите оба значения I18n.locale
и Globalize.locale
для каждого запроса. Поскольку эти переменные установлены в Thread
, это позволит избежать некоторых трудных для копирования ошибок.
Установите Globalize.locale
на I18n.locale
сразу после установки I18n.locale
. Это позволяет переводить модель по умолчанию в локаль приложения. (На моем испанском сайте я ожидаю, что данные будут на испанском языке, по умолчанию).
Измените Globalize.locale
(а не I18n.locale
), чтобы изменить перевод модели.
Сброс I18n.locale
и Globalize.locale
после каждого теста. В rspec
RSpec.configure do |config|
config.after(:each) do
I18n.locale = :en
Globalize.locale = :en
end
end
Либо используйте поддомен, либо подпапку в URL, чтобы ссылаться на локаль приложения.
Используйте языковой параметр, чтобы указать язык данных.
Когда вы работаете в приложении rails, вы, вероятно, будете использовать default_url_options
, чтобы использовать I18n.locale
в качестве параметра локали по умолчанию для помощников маршрута / пути. Однако это не работает в тестах. Я выбрал решение из этой проблемы с github на rspec-rails.
У меня обезьяна патч ActionDispatch::Routing::RouteSet
вот так:
class ActionDispatch::Routing::RouteSet
def url_for_with_locale_fix(options={})
url_for_without_locale_fix(options.merge(:locale => I18n.locale))
end
alias_method_chain :url_for, :locale_fix
end
Настройка помощника по переводу t
в качестве оболочки для метода I18n.t
module I18nHelper
def t string, options = {}
I18n.t string, options
end
end
RSpec.configure do |config|
config.include I18nHelper
end