2011-12-16 1 views
1

Rails(現時点では3.1.3)のl(またはlocalize)メソッドが、現在設定されているロケール私はちょうどこれが事実であると仮定しており、これについて具体的にテストされていません...私は、日付がロケールに従って再フォーマットされたことを確認しました。現行のロケールに基づいて、Railsに時間形式(am/pmまたはnot)を表示

私のレールコンソールでは、次のすべての時計が表示されます。 2つのロケール間の唯一の目に見える違いは、月名の大文字です。

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の命名が正しい理由です。言語を示す - COUNTRY。スウェーデン語に適したフォーマットで英語の翻訳を含むen-SEファイルを私のアプリケーションに追加することは、まったく問題ありません。

アメリカのユーザーに適した12時間の時計を取得するには、すべての米国の開発者が英語のデフォルトロケールファイル(en-USはen btwと同じに見える)を編集して編集するわけではありません。だから、私がどれほど愚かであるかを私に見せてください。私はこの問題が本当に本当に基本的なものになることを完全に期待しています。

要するに、私は間違っていますか?私のタイムスタンプを "修正"するにはどうすればいいですか? :)

答えて

5

%I.%m %pと直接指定すると、12時間の時計が表示されます。%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の中で働くあなたは違っそれを定義する場合は、例えば、現在のロケールに応じて、時間形式(AM/PMかどうか)を表示することができますもちろん3.1

+0

おかげのようになります

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

ように見えるだろうが、**表示するとき、私の問題は、**以上です12時間または24時間。私の腸はそれがロケール設定の一部でなければならないと私に言ったが、それは私のテストからはそうではないようだ。私は自分の論理を書いておかないと、フォーマットの12時間または24時間のバリエーションを求めることができません。 sv-SEロケールでサンプルを実行すると** 01.12 **が出力されます。デフォルトのロケールファイルでは、amとpmの文字列を空白に設定するためです。 –

+0

私は確信していませんが、多分それはプログラミングの質問よりも文化的ですか?必要に応じて、I18nロケールファイルにクロック形式を定義することができます。 12時間制は英語圏でのみ使用されていますが、12時間制または24時間制のどれが一般的であるか分かりません。 – 0x4a6f4672

+0

私はそれが彼の質問のポイントだと思う - 異なるロケールは異なる時計を使用する(12対24)。例えば私はen-USが12時間とde-DEを使って24時間使用することを期待しています。 –

3

異なる言語/ロケールファイルでTime.nowを使用した場合は、時刻形式が使用されます(日付値またはタイプキャストto_dateを使用する場合は日付形式が使用されます)。スウェーデンのファイルsv.ymlは英語ロケールファイル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" 
関連する問題