Отображение часового формата (am / pm или not) в Rails на основе текущей локали - PullRequest
1 голос
/ 16 декабря 2011

Я только что понял, что метод l (или локализация) в Rails (на данный момент 3.1.3), по-видимому, не управляет основанием формата часов в текущей установленной локали.Я только предположил, что это был случай, и не проверял это специально ... Я только что проверил, что даты были переформатированы в соответствии с локалью.

Я получаю 24-часовые часы для всех следующихв моей консоли рельсов.Единственная видимая разница между этими двумя языками - это заглавные буквы названия месяца.

I18n.l Time.now, :format => :short,  :locale => :"en"
I18n.l Time.now + 12.hours, :format => :short,  :locale => :"en"
I18n.l Time.now, :format => :short,  :locale => :"sv-SE"
I18n.l Time.now + 12.hours, :format => :short,  :locale => :"sv-SE"

Теперь, почему это так?Разве это не часть локализации времени?

Единственное ручное вмешательство AM / PM, которое я нахожу, заключается в создании выборок для форм, где я могу требовать 12-часовые часы «вручную».Странный выбор, так как мне кажется, что я хочу положиться на локаль.

Глядя на Mac OS, я могу выбрать язык и локаль для параметров формата отдельно, ноименно поэтому у нас есть имена en-US, en-GB, sv-SE, верно?Язык обозначений-СТРАНА.Для меня было бы вполне нормально добавить в приложение файл en-SE, содержащий переводы на английский язык, отформатировав его в Швеции.

Я предполагаю, что не все американские разработчики заходят и редактируют файл локали по умолчанию для английского языка (en-US выглядит так же, как en btw), чтобы получить 12-часовые часы, подходящие для пользователей из США.Так что не стесняйтесь показать мне, насколько я глуп.Я полностью ожидаю, что эта проблема обязательно станет чем-то действительно базовым.

Короче говоря.Что я делаю не так?И как мне «исправить» мои метки времени?:)

Ответы [ 2 ]

5 голосов
/ 16 декабря 2011

Вы можете получить 12-часовые часы, если указать их непосредственно с помощью %I.%m %p:% p означает индикатор («AM» или «PM»),% I означает «час дня» для 12-часовых часов (01..12)

>> I18n.l Time.now, :format => "%I.%m %p",  :locale => :"en"
=> "01.12 pm"
>> I18n.l Time.now + 12.hours, :format => "%I.%m %p",  :locale => :"en"
=> "01.12 am"

Это работает в Rails 3.1

3 голосов
/ 07 апреля 2015

Конечно, вы можете отобразить часовой формат (am / pm или нет) в зависимости от текущей локали, например, если вы определяете его по-разному в разных файлах языка / локали. Помните, что есть разница между форматами даты и времени, если вы используете Time.now, то используется формат времени (если вы используете значение даты или тип to_date, то используется формат даты). Шведский файл sv.yml будет выглядеть как

sv:
  time:
    formats:
      default: "%H:%M"

Файл английской локали en.yml будет выглядеть как

en:
  time:
    formats:
      default: '%I.%m %p'

Тогда

> I18n.l Time.now, :format => :default, :locale => :en
=> "06.04 PM"
> I18n.l Time.now, :format => :default, :locale => :sv
=> "18:04"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...