Почему не работают мои языковые настройки в number_to_currency? - PullRequest
0 голосов
/ 27 февраля 2019

Согласно Rails 3.2 API Документам , чтобы использовать разные локали для 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):

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Каким-то образом я нашел решение, которое сработало для меня.

Прежде всего, вам нужен файл локали с вашими требованиями.

Вот пример fr.yml file

Например, скопируйте и вставьте этот файл в app / config / locales /

, затем перезапустите консоль,

, затем попробуйте,number_to_currency (1000.51, locale:: fr)

точно, вы получите '1 000,51 €'

Здесь - полный список всех поддерживаемых стран 'файл локали.

До тех пор, пока у вас нет файла локали с требуемым форматом, вы не получите желаемого результата.

0 голосов
/ 07 марта 2019

моя версия rails 3.2.22.5, ruby ​​- 2.4.2 (я не устанавливал ниже 2.xx)

Я использую локаль yml из https://github.com/svenfuchs/rails-i18n/blob/rails-3-x/rails/locale/en-GB.yml

Это хорошо работает

 <%= number_to_currency(1234567890.506, :locale => :"en-GB") %>

 <%= number_to_currency(1234567890.506, :locale => "en-GB") %>

к результату

£1,234,567,890.51

и я добавляю fr.yml тоже как

fr:
  ...
  number:
    currency:
      format:
        ...
        unit: €

И тогда это тоже работа

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

в результате

1 234 567 890,51

Я не изменил и не добавил конфигурацию.Я добавляю только контроллер, просмотр и файл локали.И протестируйте его.

Вы можете выполнить прямой перевод, например, протестируйте

I18n.translate(:'number.currency.format', :locale => "en-GB", :default => {})

, если произойдет та же ошибка, а затем проверьте имя вашего файла, расширение, путь .

и необходимо перезапустить сервер

0 голосов
/ 01 марта 2019

Сводка:

Удалите пользовательские языковые ymls и добавьте правильную версию гема i18n-rails .Это решило эту особую проблему.

Оригинальный ответ:

Хорошо, я думаю, что ваш en-GB.yml пуст.Таким образом, он действительно находит файл и добавляет языковой стандарт в I18n.available_locales НО это не означает, что все переводы доступны.

Когда вы посмотрите на формат такого yml файла , вы увидитепризнать, что все они начинаются с

---
language-code
  some_keys: ...

Это то, что на самом деле загружается в память и, следовательно, обеспечивает все доступные переводы.Доступный языковой стандарт определяется только найденными файлами в config/locales.

Когда вы проверяете source из number_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 предоставляет множество переводов по умолчанию, которые используются во всех рельсах по умолчанию.

Добавление : До добавления файла en-GB.yml он действительно работал, как и ожидалось.Если локаль не найдена, по умолчанию используется значение доллара в здесь , поскольку переменная currency будет просто и пуста {}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...