Documentation index

ロケール(Locales)

ビルドシステムのロケールがビルド結果に影響する場合があります。 開発者にとって使用言語に応じたエラーメッセージを確認できることは重要です。 ツールが使用言語(ロケール)に応じた出力をする場合、再現性のあるビルドにとって問題になる場合があります。

ロケールにはさまざまな側面があります(詳しくは GNU libc の locale(1) を参照)。 再現性のあるビルドにとって最も重要な側面を考えてみましょう。

日時の書式

さまざまな日時の書式化関数は、ロケールに応じた出力をするようになっています。 POSIX に準拠したシステムの書式化は、環境変数 LC_CTIME に依存しています。 これは環境変数 LC_ALL で上書きできます。

ビルドシステムでは LC_ALL を使うほうがいいでしょう。

$ LC_ALL=C date -u -d '2015-10-21'
Wed Oct 21 00:00:00 UTC 2015

システムの timezone と、環境変数 TZ も書式化関数の出力に影響します。

文字の照合順序

一般的なソート関数は環境変数 LC_COLLATE に依存しています。 これは環境変数 LC_ALL で上書きできます。 ロケールによっては思いもよらない結果になるでしょう。

sort コマンドでロケールを fr_FR にすると、大文字小文字を無視します。

$ echo B a c | tr ' ' '\n' | LC_ALL=fr_FR.UTF-8 sort
a
B
c

ロケールを C にすると、文字に対応するバイト値(ASCII コード)で並び替えます(どんな環境でも使用できるロケールです)。

$ echo B a c | tr ' ' '\n' | LC_ALL=C sort
B
a
c

既定の文字エンコーディング

システムの既定の文字エンコーディングはさまざまなツールの入出力に影響します。 文字エンコーディングは環境変数 LC_CTYPE で指定します。 これは環境変数 LC_ALL で上書きできます。

例えば、lynx で HTML をテキストに変換するときは次のようになります。

LC_ALL=fr_FR lynx -dump -width 72 docs.html | file -
/dev/stdin: ISO-8859 text

疑似ロケール C.UTF-8 を指定すると、出力の文字エンコーディングは常に UTF-8 になります。

LC_ALL=C.UTF-8 lynx -dump -width 72 docs.html | file -
/dev/stdin: UTF-8 Unicode text

Documentation index

Follow us on Twitter @ReproBuilds, Mastodon @reproducible_builds@fosstodon.org & Reddit and please consider making a donation. • Content licensed under CC BY-SA 4.0, style licensed under MIT. Templates and styles based on the Tor Styleguide. Logos and trademarks belong to their respective owners. • Patches welcome via our Git repository (instructions) or via our mailing list. • Full contact info