【发布时间】:2011-05-03 17:43:58
【问题描述】:
例如:
I18n.t('something')
应该只输出
something
如果翻译丢失。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 internationalization
例如:
I18n.t('something')
应该只输出
something
如果翻译丢失。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 internationalization
不,不可能。如果你使用 I18,你需要有一个与语言对应的文件,否则 I18n 会报错。
当然,您可以在 environment.rb 文件中设置默认语言。应该在底部附近,您可以将其设置为您想要的任何语言,但在您的locales/ 文件夹中,您需要有相应的yml 翻译。
【讨论】:
有可能: 请参阅Rails Internationalization (I18n) API 处的4.1.2 默认值部分。
I18n.t :missing, :default => 'Not here'
# => 'Not here'
【讨论】:
旁注: 这可能有助于弄清楚 Rails 认为当前范围是什么(例如,使用“.something”时)
http://unixgods.org/~tilo/Rails/which_l10n_strings_is_rails_trying_to_lookup.html
这样您可以更好地避免由于在 L10n 文件中错误放置翻译字符串/不正确的键而导致丢失翻译
【讨论】:
大卫的回答是问题的正确解决方案,另一种(更冗长的)方法是抢救并返回密钥:
def translate_nicely(key)
begin
I18n.translate!(key)
rescue
key
end
end
【讨论】:
在 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
【讨论】: