Bashでロケール固有の翻訳を使用する方法は?

Bashでロケール固有の翻訳を使用する方法は?

Bashのマニュアルを閲覧しながら、ロケール固有の翻訳セクションを見つけました。Bash リファレンスマニュアル → 3.1.2.5 ロケール別翻訳:

3.1.2.5 ロケール別翻訳

ドル記号( '$')の前に二重引用符を付けた文字列を使用すると、その文字列は現在のロケールに従って翻訳されます。現在のロケールがCまたはPOSIXの場合、ドル記号は無視されます。文字列が翻訳されて置き換えられると、置換は二重引用符で囲まれます。

一部のシステムでは、LC_MESSAGES シェル変数によって選択されたメッセージ・カタログを使用します。他のものはTEXTDOMAINシェル変数の値に基づいてメッセージディレクトリの名前を生成し、サフィックス「.mo」を追加することもできます。 TEXTDOMAIN 変数を使用する場合は、TEXTDOMAINDIR 変数をメッセージ・カタログ・ファイルの場所に設定する必要があります。他の人は、TEXTDOMAINDIR/LC_MESSAGES/LC_MESSAGES/TEXTDOMAIN.moのような2つの変数を使用します。

それで私はそれを試してみることにしました。

私のコンピュータはアメリカ英語ロケールを使用しています。

$ echo $LANG
en_US.UTF-8

英語の単語を書くのに効果的です。

$ echo $"Hello"
Hello

ここで利用可能なロケールをチェックし、かなり多くを見つけました。

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
...
en_ZM.utf8
en_ZW.utf8
es_ES.utf8
POSIX

それで私はこの機能をスペイン語でテストすることにしました。しかし、ロケールを変更しても翻訳は実行されませんでした。

$ LANG=es_ES.UTF8 echo $"Hello"
Hello              # Still in English. Should be "Hola", in Spanish

なぜそんなことですか?私がここで何を見逃しているのでしょうか?どこかに翻訳された単語セットがあるようですが、どこにあるのか見つかりません。

これは私のBashバージョンです。

$ bash --version
GNU bash, version 4.3.11(1)-release (x86_64-pc-linux-gnu)

ベストアンサー1

あなたが逃しているのは実際の翻訳をすることです。 (コンピュータは英語やスペイン語を理解しておらず、ディレクトリ内の文字列を見つける方法だけを知っています。)ローカライズ内部に高度なバッシュスクリプトガイド。よりよくある質問解決された例です。持つ安全警告実際には、$"..."これは翻訳ファイルとスクリプト自体を保護する必要があることを意味します。

おすすめ記事