locale モジュールは POSIX ロケールデータベース およびロケール関連機能へのアクセスを提供します。 POSIX ロケール機構を使うことで、プログラマはソフトウェアが 実行される各国における詳細を知らなくても、 アプリケーション上で特定の地域文化に関係する部分を扱うことが できます。
locale モジュールは、_locale を被うように実装されており、ANSI C ロケール実装を使っている _locale が利用可能なら、こちらを先に使うようになっています。
locale モジュールでは以下の例外と関数を定義しています:
category[, locale]) |
locale を指定する場合、文字列、
(language code, encoding)
、からなるタプル、または
None
をとることができます。locale がタプルのの場合、
ロケール別名解決エンジンによって文字列に変換されます。
locale が与えられていて、かつ None
でない場合、
setlocale() は category の設定を変更します。
変更することのできるカテゴリは以下に列記されており、値は
ロケール設定の名前です。空の文字列を指定すると、ユーザの環境における
標準設定になります。
ロケールの変更に失敗した場合、Error が送出されます。
成功した場合、新たなロケール設定が返されます。
locale が省略されたり None
の場合、category
の現在の設定が返されます。
setlocale() はほとんどのシステムでスレッド安全では ありません。アプリケーションを書くとき、大抵は以下のコード
import locale locale.setlocale(locale.LC_ALL, '')
から書き始めます。これは全てのカテゴリをユーザの環境における 標準設定 (大抵は環境変数 LANG で指定されています) に設定します。その後複数スレッドを使ってロケールを変更したり しない限り、問題は起こらないはずです。
バージョン 2.0 で 変更 された仕様: 引数 locale の値としてタプルをサポートしました。
) |
カテゴリ | キー名 | 意味 |
---|---|---|
LC_NUMERIC |
'decimal_point' |
小数点を表す文字です。 |
|
'grouping' |
'thousands_sep' が来るかもしれない場所を相対的に
表した数からなる配列です。配列が CHAR_MAX で終端されている
場合、それ以上の桁では桁数字のグループ化を行いません。配列が 0
で終端されている場合、最後に指定したグループが反復的に使われます。 |
|
'thousands_sep' |
桁グループ間を区切るために使われる文字です。 |
LC_MONETARY |
'int_curr_symbol' |
国際通貨を表現する記号です。 |
|
'currency_symbol' |
地域的な通貨を表現する記号です。 |
|
'p_cs_precedes/n_cs_precedes' |
通貨記号が値の前につくかどうかです (それぞれ正の値、 負の値を表します)。 |
|
'p_sep_by_space/n_sep_by_space' |
通貨記号と値との間にスペースを入れるかどうかです (それぞれ正の値、負の値を表します)。 |
|
'mon_decimal_point' |
金額表示の際に使われる小数点です。 |
|
'frac_digits' |
金額を地域的な方法で表現する際の小数点以下の桁数です。 |
|
'int_frac_digits' |
金額を国際的な方法で表現する際の小数点以下の桁数です。 |
|
'mon_thousands_sep' |
金額表示の際に桁区切り記号です。 |
|
'mon_grouping' |
'grouping' と同じで、金額表示の際に使われます。 |
|
'positive_sign' |
正の値の金額表示に使われる記号です。 |
|
'negative_sign' |
負の値の金額表示に使われる記号です。 |
|
'p_sign_posn/n_sign_posn' |
符号の位置です (それぞれ正の値と負の値を表します)。以下を参照ください。 |
数値形式の値にCHAR_MAXを設定すると、そのロケールでは値が 指定されていないことを表します。
'p_sign_posn'
および 'n_sing_posn'
の取り得る値は
以下の通りです。
値 | 説明 |
---|---|
0 |
通貨記号および値は丸括弧で囲われます。 |
1 |
符号は値と通貨記号より前に来ます。 |
2 |
符号は値と通貨記号の後に続きます。 |
3 |
符号は値の直前に来ます。 |
4 |
符号は値の直後に来ます。 |
CHAR_MAX |
このロケールでは特に指定しません。 |
option) |
ロケール特有の情報を文字列として返します。この関数は全てのシステムで 利用可能なわけではなく、指定できる option もプラットフォーム 間で大きく異なります。引数として使えるのは、locale モジュールで利用 可能なシンボル定数を表す数字です。
[envvars]) |
(language code, encoding)
の形式で
返します。
POSIXによると、setlocale(LC_ALL, '')
を呼ばなかった
プログラムは、移植可能な 'C'
ロケール設定を使います。
setlocale(LC_ALL, '')
を呼ぶことで、LANG 変数で
定義された標準のロケール設定を使うようになります。
Python では現在のロケール設定に干渉したくないので、上で述べた
ような方法でその挙動をエミュレーションしています。
他のプラットフォームとの互換性を維持するために、環境変数 LANG
だけでなく、引数 envvars で指定された環境変数のリスト
も調べられます。envvars は標準では GNU gettext で使われて
いるサーチパスになります; パスには必ず変数名 "LANG" が含まれて
いるからです。GNU gettext サーチパスは 'LANGUAGE'
、
'LC_ALL'
、'LC_CTYPE'
、および 'LANG'
が
列挙した順番に含まれています。
'C'
の場合を除き、言語コードは RFC 1766 に対応します。
language code および encoding が決定できなかった
場合、None
になるかもしれません。
バージョン 2.0 で 新たに追加 された仕様です。
[category]) |
'C'
の場合を除き、言語コードは RFC 1766 に対応します。
language code および encoding が決定できなかった
場合、None
になるかもしれません。
バージョン 2.0 で 新たに追加 された仕様です。
[do_setlocale]) |
システムによっては、ユーザの設定を取得するために
setlocale を呼び出す必要があるため、この関数はスレッド安全
ではありません。setlocale を呼び出す必要がない、または
呼び出したくない場合、do_setlocale を False
に
設定する必要があります。
バージョン 2.3 で 新たに追加 された仕様です。
localename) |
与えたエンコードがシステムにとって未知の場合、標準の設定では、 この関数は setlocale() と同様に、エンコーディングを ロケールコードにおける標準のエンコーディングに設定します。 バージョン 2.0 で 新たに追加 された仕様です。
[category]) |
標準設定は getdefaultlocale() を呼ぶことで決定されます。 category は標準で LC_ALL になっています。 バージョン 2.0 で 新たに追加 された仕様です。
string1, string2) |
0
を返します。
string) |
format, val[, grouping[, monetary]]) |
%
演算子の慣行に従います。浮動小数点
数については、必要に応じて浮動小数点が変更されます。grouping
が真なら、ロケールに配慮した桁数の区切りが行われます。
monetaryが真なら、桁区切り記号やグループ化文字列を用いて変換を行 います。
この関数や、1文字の指定子でしか動作しないことに注意しましょう。フォー マット文字列を使う場合はformat_string()を使用します。
バージョン 2.5 で 変更 された仕様: monetaryパラメータが追加されました
format, val[, grouping]) |
format % val
形式のフォーマット指定子を、現在のロケール設定を考
慮したうえで処理します。
バージョン 2.5 で 新たに追加 された仕様です。
val[, symbol[, grouping[, international]]]) |
symbolが真の場合は、返される文字列に通貨記号が含まれるようになり ます。これはデフォルトの設定です。groupingが真の場合(これはデフォ ルトではありません)は、値をグループ化します。internationalが真の 場合(これはデフォルトではありません)は、国際的な通貨記号を使用します。
この関数は`C'ロケールでは動作しないことに注意しましょう。まず最初に setlocale()でロケールを設定する必要があります。
バージョン 2.5 で 新たに追加 された仕様です。
float) |
str(float)
と同じように書式化しますが、
ロケールに配慮した小数点が使われます。
string) |
string) |
関数 nl_langinfo は以下のキーのうち一つを受理します。 ほとんどの記述は GNU C ライブラリ中の対応する説明から引用されています。
ほとんどのロケールではこの値を定義していません。この値を設定している ロケールの例は日本です。日本では、日付の伝統的な表示法に、時の天皇 に対応する元号名を含めます。
通常この値を直接指定する必要はありません。E
を書式化文字列に
指定することで、関数 strftime がこの情報を使うようになります。
返される文字列の様式は決められていないので、異なるシステム間で様式に
関する同じ知識が使えると期待してはいけません。
例:
>>> import locale >>> loc = locale.getlocale(locale.LC_ALL) # get current locale >>> locale.setlocale(locale.LC_ALL, 'de_DE') # use German locale; name might vary with platform >>> locale.strcoll('f\xe4n', 'foo') # compare a string containing an umlaut >>> locale.setlocale(locale.LC_ALL, '') # use user's preferred locale >>> locale.setlocale(locale.LC_ALL, 'C') # use default (C) locale >>> locale.setlocale(locale.LC_ALL, loc) # restore saved locale