【问题标题】:How to use i18n key as default translation in Rails 3?如何在 Rails 3 中使用 i18n 键作为默认翻译?
【发布时间】:2011-05-03 17:43:58
【问题描述】:

例如:

I18n.t('something')

应该只输出

something

如果翻译丢失。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 internationalization


    【解决方案1】:

    不,不可能。如果你使用 I18,你需要有一个与语言对应的文件,否则 I18n 会报错。

    当然,您可以在 environment.rb 文件中设置默认语言。应该在底部附近,您可以将其设置为您想要的任何语言,但在您的locales/ 文件夹中,您需要有相应的yml 翻译。

    【讨论】:

      【解决方案2】:

      有可能: 请参阅Rails Internationalization (I18n) API 处的4.1.2 默认值部分。

      I18n.t :missing, :default => 'Not here'
      # => 'Not here'
      

      【讨论】:

        【解决方案3】:

        旁注: 这可能有助于弄清楚 Rails 认为当前范围是什么(例如,使用“.something”时)

        http://unixgods.org/~tilo/Rails/which_l10n_strings_is_rails_trying_to_lookup.html

        这样您可以更好地避免由于在 L10n 文件中错误放置翻译字符串/不正确的键而导致丢失翻译

        【讨论】:

          【解决方案4】:

          大卫的回答是问题的正确解决方案,另一种(更冗长的)方法是抢救并返回密钥:

          def translate_nicely(key)
            begin
              I18n.translate!(key)
            rescue
              key
            end
          end
          

          【讨论】:

          • 对条件流使用异常逻辑通常是不好的做法。来自重构书:refactoring.com/catalog/replaceExceptionWithTest.html
          • 我同意这通常是不好的做法,我还强调说大卫的解决方案是回退到默认值的正确方法。当然,也有(实用的)情况,您不希望应用程序暴露错误并使用合理的默认值来提供更好的用户体验。在这种情况下,我会说偏离准则并很好地处理错误是公平的。
          【解决方案5】:

          在 Rails 4 上,您可以更改异常处理程序。

          将以下内容添加到config/initializers/i18n.rb

          module I18n
            class MissingTranslationExceptionHandler < ExceptionHandler
              def call(exception, locale, key, options)
                if exception.is_a?(MissingTranslation)
                  key
                else
                  super
                end
              end
            end
          end
          
          I18n.exception_handler = I18n::MissingTranslationExceptionHandler.new
          

          现在你可以在视图上做:

          <p><%= t "Not translated!" %></p>
          

          主题指南:http://guides.rubyonrails.org/i18n.html#using-different-exception-handlers

          【讨论】:

          • 人们可能只希望它仅用于特定环境。将此添加为初始化程序会限制可能性。但是感谢您的链接。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-09
          • 2020-10-23
          • 2011-07-27
          • 2011-10-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多