mar*_*ion 5 ruby-on-rails internationalization ruby-on-rails-3.2
根据Rails 3.2 API Docs的要求,要使用不同的语言环境number_to_currency
,我需要执行以下操作:
<%= number_to_currency(1234567890.506, :locale => :fr) %>
Run Code Online (Sandbox Code Playgroud)
我期待以下输出:
# => 1 234 567 890,51 €
Run Code Online (Sandbox Code Playgroud)
即使我确实在我的应用程序中使用了确切的内容,它仍会输出以下内容:
$1,234,567,890.51
Run Code Online (Sandbox Code Playgroud)
当我available_locales
在应用程序中检查时,会得到以下信息:
> I18n.available_locales
=> [:en, :de, :es, :fr, :ja, :pl, :"pt-BR", :ru, :sv, :"zh-CN"]
Run Code Online (Sandbox Code Playgroud)
因此,它应该工作,但是没有。
我想念什么?
更新1
根据@ s3tjan的评论,我在该链接的Rails问题中进行了一些挖掘,并将我引向application.rb
发现的地方I18n.enforce_available_locales = false
。我将其更改为true并重新启动了服务器。
当我再次尝试上述操作时,现在出现此错误:
ActionView::Template::Error (:fr is not a valid locale):
Run Code Online (Sandbox Code Playgroud)
不确定如何解决此问题。
更新2
所以我才意识到我的从来没有本地文件config/locales
。我真正想要的是使用GBP英镑作为货币,因此我在中添加了一个en-GB.yml
文件config/locales
,然后重新启动了服务器和控制台。
在我的中application.rb
,我具有以下内容:
I18n.enforce_available_locales = true
Run Code Online (Sandbox Code Playgroud)
然后,我检查了控制台并得到以下信息:
[1] pry(main)> I18n.available_locales
=> [:en, :de, :es, :fr, :ja, :pl, :"pt-BR", :ru, :sv, :"zh-CN", :"en-GB"]
[2] pry(main)>
Run Code Online (Sandbox Code Playgroud)
因此,:"en-GB"
已成功添加到我的应用的加载路径中。
但是当我这样做时:
<%= number_to_currency(1234567890.506, :locale => :"en-GB") %>
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
:"en-GB" is not a valid locale excluded from capture due to environment or should_capture callback
ActionView::Template::Error (:"en-GB" is not a valid locale):
Run Code Online (Sandbox Code Playgroud)
因此仍然无法正常工作。
更新3
我的en-GB.yml
文件直接来自https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/en-GB.yml
所以看起来就像这样。但是我仍然遇到相同的错误:
ActionView::Template::Error (:"en-GB" is not a valid locale):
Run Code Online (Sandbox Code Playgroud)
概要:
删除自定义语言 yml 并添加正确版本的i18n-rails gem。这解决了这个特殊问题。
原答案:
好吧,我的猜测是你的 en-GB.yml 是空的。因此它实际上找到了该文件并添加了语言环境I18n.available_locales
,但这并不包括所有翻译都可用。
当您查看此类 yml文件的格式时,您会发现它们都以
---
language-code
some_keys: ...
Run Code Online (Sandbox Code Playgroud)
这是实际加载到内存中的内容,因此提供了所有可用的翻译。可用的区域设置仅由 中找到的文件定义config/locales
。
当您检查It的来源number_to_currency
时,它会从选项中获取语言环境,并将其沿着它查找的键传递给 I18n。
I18n.translate(:'number.format', :locale => options[:locale], :default => {})
Run Code Online (Sandbox Code Playgroud)
由于您只是说它en-GB
可用,但内存中没有沿着区域设置的实际键,因此您会遇到缺少翻译的问题。
我建议您要么使用链接的 yml 文件的内容并将其粘贴到您的 en-GB.yml 中,要么删除您的 en-GB.yml 并找到 3.2 工作i18n-rails版本并使用它。i18n-rails 提供了大量的默认翻译,这些翻译在默认的 Rails 中都被使用。
添加:在添加 en-GB.yml 文件之前,它实际上按预期工作。当未找到语言环境时,此处默认为 $ 美元,因为currency
变量将是 just 且为空{}
。
归档时间: |
|
查看次数: |
191 次 |
最近记录: |