ruby-on-rails - 为什么我在 number_to_currency 中的语言环境设置不起作用?

标签 ruby-on-rails internationalization ruby-on-rails-3.2

根据 Rails 3.2 API Docs ,要为 number_to_currency 使用不同的语言环境,我需要执行以下操作:

<%= number_to_currency(1234567890.506, :locale => :fr) %>

我期待以下输出:
# => 1 234 567 890,51 €

即使我确实在我的应用程序中使用了那个确切的东西并且它不断输出以下内容:
$1,234,567,890.51

当我在我的应用程序中检查 available_locales 时,我得到以下信息:
> I18n.available_locales
=> [:en, :de, :es, :fr, :ja, :pl, :"pt-BR", :ru, :sv, :"zh-CN"]

所以它应该工作,但它没有。

我错过了什么?

更新 1

根据@s3tjan 的评论,我对链接的 Rails 问题进行了一些挖掘,这让我找到了 application.rb ,在那里我发现了 I18n.enforce_available_locales = false 。我将其更改为 true 并重新启动服务器。

当我再次尝试上述操作时,我现在收到此错误:
ActionView::Template::Error (:fr is not a valid locale):

不知道如何解决这个问题。

更新 2

所以我才意识到我的 config/locales 中从来没有区域设置文件。我真正想要的是使用英镑作为货币,所以我在我的 en-GB.yml 中添加了一个 config/locales 文件,然后我重新启动了我的服务器和控制台。

在我的 application.rb 中,我有以下内容:
I18n.enforce_available_locales = true

然后我检查了我的控制台并得到了这个:
[1] pry(main)> I18n.available_locales
=> [:en, :de, :es, :fr, :ja, :pl, :"pt-BR", :ru, :sv, :"zh-CN", :"en-GB"]
[2] pry(main)> 

因此 :"en-GB" 已成功添加到我的应用程序的加载路径中。

但是当我在我看来这样做时:
<%= number_to_currency(1234567890.506, :locale => :"en-GB") %>

这是我得到的错误:
:"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):

所以还是不行。

更新 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):

最佳答案

概要:

删除自定义语言 ymls 并添加正确版本的 i18n-rails gem 。这解决了这个特殊问题。

原答案:

好的,我的猜测是您的 en-GB.yml 是空的。所以它实际上找到了文件并在 I18n.available_locales 中添加了语言环境。但这并不包括所有翻译都可用。

当你看这样一个yml的格式时file你会发现它们都以

---
language-code
  some_keys: ...

这是实际加载到内存中的内容,因此提供了所有可用的翻译。可用的语言环境仅由在 config/locales 中找到的文件定义。 .

当您查看 sourcenumber_to_currency它从选项中获取语言环境并将它沿着它寻找的键传递给 I18n。
I18n.translate(:'number.format', :locale => options[:locale], :default => {})

既然你刚刚说en-GB可用,但在内存中没有沿语言环境的实际键,您会遇到缺少翻译问题。

我建议您要么使用链接的 yml 文件的内容并将其粘贴到您的 en-GB.yml 中,要么删除您的 en-GB.yml 并找到一个 3.2 工作版 i18n-rails版本并使用它。 i18n-rails 提供了大量默认翻译,这些翻译在所有默认 rails 上使用。

添加:
在添加 en-GB.yml 文件之前,它实际上按预期工作。
当没有找到语言环境时,它在 here 中默认为美元。自 currency变量将只是空的 {} .

关于ruby-on-rails - 为什么我在 number_to_currency 中的语言环境设置不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54894987/

相关文章:

ruby-on-rails - 在 Rails Controller 中包含库时出现 Paypal SDK Ruby 错误

java - 以最大语言环境为开发人员定位的API的I18n/L10n

css - Django 国际化 : How to translate css content?

java - Spring REST API 和国际化

ruby - 如何在 Rails 3.2 中使用 "to_xs"?

php - 我应该在 Ruby on Rails 中重写我的 Codeigniter/PHP 应用程序吗?为什么?

javascript - JavaScript 中的 ruby​​ 给出 Uncaught SyntaxError : Unexpected identifier

ruby-on-rails - before_filter set_locale 除了 Controller

ruby-on-rails - 添加自定义种子文件

ruby-on-rails - 为什么在 View 中同时使用 <% 和 <%=?