Есть несколько решений, но если бы я делал это для производственного проекта, я бы, вероятно, сделал что-то вроде следующего:
- Создайте файлы для ваших переведенных Условий предоставления услуг в
config/locales/terms/
, назвав их terms.en.html
, заменив en
языком для каждого перевода и html
форматом файла (например, вы можете использовать Haml, Markdown и т. д.).
Создайте следующие вспомогательные методы (поместите их в app/helpers/application_helper.rb
, чтобы использовать их везде, но вы можете поместить их в любой вспомогательный файл, который вам нужен / нужен):
def localized_document_for(document, locale)
raise ArgumentError.new('nil is not a valid document') if document.nil?
raise I18n::InvalidLocale.new('nil is not a valid locale') if locale.nil?
localized_document = path_for_localized_document(document, locale)
raise MissingTranslationData unless File.exists?(localized_document)
# If you're using Markdown, etc. replace with code to parse/format your document
File.open(localized_document).readlines.join
end
def path_for_localized_document(document, locale)
"#{Rails.root}/config/locales/#{document}/#{document}.#{locale.to_s}.html"
end
Теперь, по вашему мнению, вы можете использовать localized_document_for('terms', I18n.locale)
в любое время, когда вам нужно получить содержание Условий обслуживания на языке пользователя. Теперь код, который вы используете для извлечения документа, является СУХИМ (вы можете легко извлечь другие документы, создав другой каталог в config/locales
и изменив значение аргумента document
), и ваши переведенные документы будут храниться в их собственном каталоге и может быть легко отредактирован (и не зависит от YAML, который не имеет никакого значения для хранения одного документа в файле).
Обратите внимание, что если вы хотите сделать это "Rails 3 Way", вы можете использовать I18n::Backend::Chain
(см. https://github.com/svenfuchs/i18n/blob/master/lib/i18n/backend/chain.rb), и передать I18n::Backend::Simple.new
вместе с пользовательским бэкэндом, который читает файлы по мере необходимости. , но для разовой сделки я считаю, что помощники работают достаточно.