首先要确认的是我不会在数据库中提供多种语言的任何内容。我只是在谈论页面上的文字。
我对Rails Guide中的陈述感到有点困惑:
i18n库对语言环境键采取实用的方法(经过一些讨论),仅包括语言环境(“语言”)部分,如:en,:pl,而不是区域部分,如:en-US或:en-GB,传统上用于分离“语言”和“区域设置”或“方言”。许多国际应用程序仅使用语言环境的“语言”元素,例如:cs,:th或:es(适用于捷克语,泰语和西班牙语)。但是,不同语言群体之间也存在区域差异,这些差异可能很重要。例如,在:en-US语言环境中,您将使用$作为货币符号,而在:en-GB中,您将拥有£。没有什么能阻止你以这种方式分离区域和其他设置:你只需要在:en-GB字典中提供完整的“英语 - 英国”语言环境。
假设我想拥有一套完整的英语本地化,其中包含美国部分和GB部分。
所以我需要在语言环境文件夹中包含en.yml
,en-US.yml
和en-GB.yml
3个文件,
-- Rails Root
|-- config
|-- locale
|
|-- en.yml
|-- en-US.yml
|-- en-GB.yml
当我设置I18n.locale = 'en-US'
时,它将使用en-US.yml
中的文字翻译。这是在rails 3中执行I18n
的推荐方法吗?
并且保持en.yml
中的相同部分(如周二周一,它们在美国和英国是相同的)并且在分隔的文件中保留不同的东西(类似于货币符号){{} 1}}和en-US.yml
? rails可能会在en-GB.yml
中自动找到相同的部分吗?在我测试时,它不支持开箱即用
答案 0 :(得分:5)
为避免重复使用en-US和en-GB共有的所有翻译,您可以为不同的翻译定义自定义回退路由。
I18n.fallbacks.map(:"en-GB" => :"en")
或
I18n.fallbacks[:"en-GB"] # => [:"en-US", :en]
因此,如果en-GB没有某种翻译,您可以回退到en.yml或en-US.yml。通过这种方式,您可以将区域特定的翻译保留在en-US.yml和en-GB.yml中,而他们共有的所有内容都可以在en中,并且当您无法找到en-US.yml或en-GB.yml中的特定翻译。