2016-04-27 5 views
1

В моей локали рельсах консоли, я вижу, что у меня есть следующие доступные локали через I18n драгоценный каменьЛокализуя DateTimes в Rails I18N

> I18n.available_locales 
=> [:en, :de, :es, :ja, :"pt-BR", :"zh-CN", :"zh-HK", :"zh-TW"] 

Я пытаюсь с помощью localize с определенным форматом даты на английском языке -

> I18n.with_locale("en") { I18n.l(Time.zone.now, format: "%B, %Y") } 
=> "April, 2016" 

Которая отлично работает. Тогда я попробовать то же самое с испанским и японским -

> I18n.with_locale("es") { I18n.l(Time.zone.now, format: "%B, %Y") } 
=> "s, 2016" 
> I18n.with_locale("ja") { I18n.l(Time.zone.now, format: "%B, %Y") } 
=> "s, 2016" 

Похоже, название месяца переводится в "s".

Рельсы I18n жемчужина definitely defines month names для вышеуказанных мест. Использует ли метод #localize эти или пытается попытаться извлечь из других источников?

Спасибо!

+1

'I18n.with_locale (" es ") {I18n.l (Time.zone.now, format:"% B,% Y ")}' работает для меня, но 'I18n.with_locale (" ja ") { I18n.l (Time.zone.now, format: "% B,% Y")} 'does not. Какую версию рельсов вы используете? –

+1

ли ваш проект rails/gem определяет дополнительные переводы? кажется, что-то, что было сломано там –

ответ

3

Я получил тот же набор выходов, что и you. Ниже приведены шаги, которые я предпринял для отладки поведения.

  1. Проверено, если rails-i18n является частью моего приложения рельсы, проверив Gemfile.lock (На самом деле, это не). I18n драгоценного камень, который является частью моего Gemfile.lock является зависимостью от activesupport gem

  2. Checked I18n пути загрузки для любого файла перевода для «эс» локал I18n.load_path. Их не было.

  3. Прошел через метод I18n.translate для обработки форматов даты и времени. Директивы формата [% a,% A,% b,% B,% p,% P] в строке формата используются только для локализации (день, месяц, индикатор меридиана (AM/PM) - как более короткие, так и более длинные форматы) поскольку только те содержат языковые тексты.

I18n.with_locale (: о) {I18n.localize (Time.zone.now, формат: "% В,% Y")}

внутренний вызов

I18n.translate (: "date.month_names", локалите: =>: о) [Time.zone.now.mon]

, что возвращает "April"

Аналогично,

I18n.with_locale (: ES) {I18n.localize (Time.zone.now, формат: "% В,% Y")}

внутренний вызов

I18n.translate (: "date.month_names",: locale =>: es) [Time.zone.now.пн]

Но не однин перевод,

I18n.translate (: "date.month_names",: локаль =>: адреса)

=> «перевод отсутствует: эс .date.month_names»

Time.zone.now.mon = 4 .so, он возвращает "translation missing: es.date.month_names"[4] который "s"

Надеюсь, это поможет.

+0

Спасибо за подробный анализ, который имеет прекрасный смысл сейчас (было интересно, в частности, как '' '' '' 'продолжал возвращаться :)). Я полагаю, что моя основная ошибка заключалась в том, что «rails-i18n» включен по умолчанию, и это не так. Я предполагаю, если я добавлю, что этот драгоценный камень в нем будет иметь файлы перевода с испанского, японского и т. Д .... Спасибо! – user2490003

1

Я столкнулся с той же проблемой, я использовал I18n для локализации приложения для рельсов для spanish. при этом время перевод это работает отлично на английский следующим образом:

I18n.l(raw_date.to_time, format: :long) = "Tuesday, July 11, 2017" 

Для испанского я получаю

I18n.l(raw_date.to_time, format: :long) = "a, t 11, 2017" 

Я обновил свой es.yml документ с date, day_name, month_name, abbr_day_names, abbr_month_names следующим образом:

es: 
date: 
    day_names: 
    - domingo 
    - lunes 
    - martes 
    - miércoles 
    - jueves 
    - viernes 
    - sábado 
    month_names: 
    - 
    - enero 
    - febrero 
    - marzo 
    - abril 
    - mayo 
    - junio 
    - julio 
    - agosto 
    - septiembre 
    - octubre 
    - noviembre 
    - diciembre 
time: 
    formats: 
    long: '%A, %B %d, %Y' 
    short: '%b %d, %Y' 

После этого для spanish Я получил желаемый результат.

I18n.l(raw_date.to_time, format: :long) = "viernes, julio 21, 2017" 

при переходе через документы я узнал, что по умолчанию I18n будет включать в себя date, day_name, month_name, abbr_day_names, abbr_month_names на английском, где, как на испанском и других языках, представляющих интерес, нам нужно добавить эти поля в соответствующие yaml документы, которые мы поддерживаем. This - это ссылка для получения этих полей для соответствующих языков.