如何在Rails 3中使用i18n密钥作为默认翻译?

时间:2010-11-02 02:39:30

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

例如:

I18n.t('something')

应仅输出

something

如果翻译缺失。

5 个答案:

答案 0 :(得分:26)

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

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

答案 1 :(得分:7)

在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

答案 2 :(得分:1)

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

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

通过这种方式,您可以更好地避免因L10n文件/错误键中翻译字符串的错误放置而错过翻译

答案 3 :(得分:1)

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

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

答案 4 :(得分:-9)

不,不可能。如果您使用I18,您需要有一个与该语言相对应的文件,否则I18n会抱怨。

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