如何使用i18n& amp;来配置语言环境别名轨道?

时间:2015-01-20 15:30:46

标签: ruby-on-rails rails-i18n

我正在开发一个rails应用程序(3.2.13),它被翻译成多种语言,包括(挪威的3种口味之一)。在公共页面上,应用程序使用浏览器的语言设置来设置区域设置。

大多数浏览器提供3个独立的挪威短代码:nonb& nn。我们的翻译位于nb,但我认为最好no& nn也默认为nb。这样,如果用户的浏览器语言偏好设置为no然后设置为en,则应用会先尝试提供nb挪威语,而不是直接跳到英语。

是否可以为i18n gem配置“语言别名”列表,如下所示?

 config.i18n.available_locales = [:sv, :en, :nb, :da, :fi]
 config.i18n.aliased_locales = [:nb <= :no, :nb <= :nn]

2 个答案:

答案 0 :(得分:3)

简短回答

看一看后备行为

initializers中创建一个文件,例如i18n_fallbacks.rb

config.i18n.fallbacks = {:no => [:nb], :nn => [:nb]}

Here the reference

相关事项

您甚至可以设置多个回退,它们将按照指定的顺序进行:

例如:

config.i18n.default_locale = :de
config.i18n.fallbacks = {:de => [:en,:es]}

<强> de.yml

  :de:
    greeting: Hallo

<强> en.yml

  :en:
    foo: bar

<强> es.yml

  :es:
    bar: baz

您将获得以下内容:

I18n.t :greeting # found in de.yml, no fallback
# => 'Hallo'

I18n.t :foo # not in :de, try in :en and found
# => "bar"

I18n.t :bar # not in :de, try in :en and in :es
# => "baz"

I81n.t :other # not found anywhere, note the message delivers not found for the current locale:
# => "translation missing: de.other"

答案 1 :(得分:0)

在最新的i18n gem(0.7.0)中,我发现有必要定义这样的回退语言环境(在config/application.rb中):

# Custom I18n fallbacks
config.after_initialize do
  I18n.fallbacks = I18n::Locale::Fallbacks.new(at: :"de-DE", ch: :"de-DE", gb: :"en-US")
end

您还需要在所有config.i18n.fallbacks = true个文件中设置config/environments/*.rb