Júl*_*tos 2 translation ruby-on-rails internationalization ruby-on-rails-3
Rails 3中的服务条款文档国际化的最佳实践是什么?我可以想到两个选择:
<li><%= I18n.t :tos_paragraph_1 %></li><li><%= I18n.t :tos_paragraph_2 %></li>这些似乎都不是一个好的解决方案.有任何想法吗?
有一些解决方案,但如果我在生产项目中这样做,我可能会做类似以下的事情:
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
Run Code Online (Sandbox Code Playgroud)现在,在您的视图中,您可以随时使用localized_document_for('terms', I18n.locale)用户语言获取服务条款的内容.现在,您用来获取文档的代码是DRY(您可以通过创建另一个目录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使用自定义的后端读取这些文件作为必要的,但对于一次性的交易,我相信足够的帮手一起工作.