「date」がローカライズされたときに間違った単語の順序で日付を印刷するのはなぜですか?

「date」がローカライズされたときに間違った単語の順序で日付を印刷するのはなぜですか?

私はKubuntu 14.04.2 LTSを使用しています。次のコマンドを使用してロケールを設定しました。

export LANG=ru_RU.utf8 LANGUAGE=ru_RU.utf8 LC_ALL=ru_RU.utf8

今、localeすべての項目があると仮定しますru_RU.utf8。ただし、を発行すると、date次の結果が表示されます。

Чт. мая 14 12:55:36 MSK 2015

英語で「5月14日」と言うのが一般的ですが、ロシア語では「мая14」とは言いません(「5月14日」ではなく「5月14日」を意味する)。 「14 мая」または最悪の場合は「14月」でなければなりません。

によると、ロケールinfo coreutils 'date invocation'のデフォルトの書式文字列は、ロケールで取得したものとまったく同じように表示されます。ただし、同じ情報ページには、フォーマット文字列がロケールカテゴリによって異なることが示されています。そのため、システムロケールデータベースにバグがあると結論付けました。C'+%a %b %e %H:%M:%S %Z %Y'ru_RU.utf8LC_TIME

これは実際にバグですか、それとも何か抜けましたか?

ベストアンサー1

これはバグではありませんdate。の定義が原因ですLC_TIMEinfoページによると:

移動する日付型パラメータなしで呼び出すことは、呼び出すのと同じです。
次のような基本的な形式があります。LC_TIMEロケールカテゴリ。

今開くと/usr/share/i18n/locales/ru_RU、下には、次のように定義された(日付/時刻形式)がLC_TIME表示されます。date_fmt

date_fmt       "<U0025><U0061><U0020><U0025><U0062><U0020><U0025><U0065>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"

に変換されます。%a %b %e %H:%M:%S %Z %Y-
%a該当のロケールの曜日の省略名(例)Чт-
%b該当のロケールの月の省略名(例)май-
%e日付、空白で埋められた日付%_d(例14)など
。 ..
したがって、ファイルを編集し、2つの変換指定子と%b%eつまり、swap<U0062><U0065>)を置き換える場合:

date_fmt       "<U0025><U0061><U0020><U0025><U0065><U0020><U0025><U0062>/
<U0020><U0025><U0048><U003A><U0025><U004D><U003A><U0025><U0053><U0020>/
<U0025><U005A><U0020><U0025><U0059>"

その後、これを実行するとlocale-gen正しい日付形式を取得できます。

LC_TIME=ru_RU.utf8 date
Чт 14 май 13:27:14 MSK 2015

上記の文書の最終改訂日(2015年5月14日現在)は次のとおりです。2013-11-14バグを報告してください。[email protected]

おすすめ記事