gpt4 book ai didi

ruby-on-rails - 在 Rails 3 中使用标记国际化整个文本

转载 作者:行者123 更新时间:2023-12-04 05:58:42 25 4
gpt4 key购买 nike

例如,在 Rails 3 中国际化服务条款文档的最佳实践是什么?我可以想到两个选项:

  • 为每个语言环境创建一个部分,并根据当前用户的语言环境选择加载哪个。
  • <li><%= I18n.t :tos_paragraph_1 %></li><li><%= I18n.t :tos_paragraph_2 %></li>

这些似乎都不是好的解决方案。有什么想法吗?

最佳答案

有一些解决方案,但如果我在生产项目中这样做,我可能会做如下事情:

  1. config/locales/terms/ 中为翻译后的服务条款创建文件,将它们命名为 terms.en.html,替换 en包含每个翻译的语言环境,html 包含文件格式(例如,您可以使用 Haml、Markdown 等)。
  2. 创建以下辅助方法(将它们放在 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

现在,在您的 View 中,您可以随时使用 localized_document_for('terms', I18n.locale) 获取用户语言的服务条款内容。现在您用来获取文档的代码是 DRY(您可以通过在 config/locales 中创建另一个目录并更改 document 参数的值来轻松获取其他文档),并且您的翻译文档存储在它们自己的目录中并且可以轻松编辑(并且不依赖于 YAML,这对于将单个文档存储在一个文件中没有任何值(value))。

请注意,如果您想使用“Rails 3 方式”,您可以使用 I18n::Backend::Chain(参见 https://github.com/svenfuchs/i18n/blob/master/lib/i18n/backend/chain.rb ),并传入 I18n::Backend::Simple.new 以及一个根据需要读取文件的自定义后端,但对于一次性交易,我相信这些助手工作足够了。

关于ruby-on-rails - 在 Rails 3 中使用标记国际化整个文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4895998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com