"locale" --- 国際化サービス
***************************

**ソースコード:** Lib/locale.py

======================================================================

"locale" モジュールは POSIX のロケールデータベースと関連機能へのアクセ
スを提供します。 POSIX のロケール機構を使うと、ソフトウェアが実行され
る国ごとの事情をすべて知っていなくても、アプリケーション内で文化的な違
いの一部に対応できます。

"locale" モジュールは "_locale" モジュール上に実装されています。 後者
は、利用できる場合に ANSI C のロケール実装を使用します。

"locale" モジュールは次の例外と関数を定義しています。

exception locale.Error

   "setlocale()" に渡されたロケールが認識されない場合例外が送出されま
   す。

locale.setlocale(category, locale=None)

   *locale* が指定され、"None" でない場合、"setlocale()" は *category*
   のロケール設定を変更します。 利用できるカテゴリは、後述のデータの説
   明に一覧があります。 *locale* には 文字列 または言語コードとエンコ
   ーディングのペアを指定できます。 空文字列はユーザーのデフォルト設定
   を指定します。 ロケールの変更に失敗すると "Error" を送出します。 成
   功すると、新しいロケール設定を返します。

   *locale* がペアの場合、ロケールの別名を処理する機構でロケール名に変
   換されます。 言語コードは、エンコーディングを除けば ロケール名 と同
   じ形式です。 言語コードとエンコーディングには "None" も指定できます
   。

   *locale* が省略されたり "None" の場合、*category* の現在の設定が返
   されます。

   以下はプログラム例です:

      >>> import locale
      >>> loc = locale.setlocale(locale.LC_ALL)  # 現在のロケールを取得する
      # ドイツ語ロケールを使う。
      # 名前と利用可否はプラットフォームによって異なる。
      >>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
      >>> locale.strcoll('f\xe4n', 'foo')  # ウムラウトを含む文字列を比較する
      >>> locale.setlocale(locale.LC_ALL, '')   # ユーザーが選択したロケールを使う
      >>> locale.setlocale(locale.LC_ALL, 'C')  # デフォルトの C ロケールを使う
      >>> locale.setlocale(locale.LC_ALL, loc)  # 保存したロケールに戻す

   ほとんどのシステムで "setlocale()" はスレッドセーフではありません。
   通常、アプリケーションは最初に次の呼び出しを行います。

      import locale
      locale.setlocale(locale.LC_ALL, '')

   これにより、すべてのカテゴリのロケールがユーザーのデフォルト設定 (
   通常は環境変数 "LANG" で指定) になります。 その後ロケールを変更しな
   ければ、複数のスレッドを使っても問題は起こらないはずです。

   バージョン 3.15 で変更: "@" 修飾子付きの言語コードをサポートしまし
   た。

locale.localeconv()

   地域的な慣行のデータベースを辞書として返します。辞書は以下の文字列
   をキーとして持っています:

   +------------------------+---------------------------------------+----------------------------------+
   | カテゴリ               | キー                                  | 意味                             |
   |========================|=======================================|==================================|
   | "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_sign_posn'" の取り得る値は以下の通りです
   。

   +----------------+-------------------------------------------+
   | 値             | 説明                                      |
   |================|===========================================|
   | "0"            | 通貨記号および値は丸括弧で囲われます。    |
   +----------------+-------------------------------------------+
   | "1"            | 符号は値と通貨記号より前に来ます。        |
   +----------------+-------------------------------------------+
   | "2"            | 符号は値と通貨記号の後に続きます。        |
   +----------------+-------------------------------------------+
   | "3"            | 符号は値の直前に来ます。                  |
   +----------------+-------------------------------------------+
   | "4"            | 符号は値の直後に来ます。                  |
   +----------------+-------------------------------------------+
   | "CHAR_MAX"     | このロケールでは特に指定しません。        |
   +----------------+-------------------------------------------+

   "LC_NUMERIC" または "LC_MONETARY" のロケールが "LC_CTYPE" と異なり
   、数値や通貨の文字列が非 ASCII 文字を含む場合、この関数は
   "LC_CTYPE" のロケールを一時的に "LC_NUMERIC" または "LC_MONETARY"
   のロケールに設定します。 この一時的な変更は他のスレッドに影響します
   。

   バージョン 3.7 で変更: 状況によっては、この関数が "LC_CTYPE" のロケ
   ールを一時的に "LC_NUMERIC" のロケールに設定するようになりました。

locale.nl_langinfo(option)

   ロケール特有の情報を文字列として返します。この関数は全てのシステム
   で利用可能なわけではなく、指定できる *option* もプラットフォーム間
   で大きく異なります。引数として使えるのは、locale モジュールで利用可
   能なシンボル定数を表す数字です。

   関数 "nl_langinfo()" は以下のキーのうち一つを受理します。ほとんどの
   記述は GNU C ライブラリ中の対応する説明から引用されています。

   locale.CODESET

      選択されたロケールで用いられている文字エンコーディングの名前を文
      字列で取得します。

   locale.D_T_FMT

      日付と時刻をロケール特有の方法で表現するために、
      "time.strftime()" の書式文字列として用いることのできる文字列を取
      得します。

   locale.D_FMT

      日付をロケール特有の方法で表現するために、 "time.strftime()" の
      書式文字列として用いることのできる文字列を取得します。

   locale.T_FMT

      時刻をロケール特有の方法で表現するために、 "time.strftime()" の
      書式文字列として用いることのできる文字列を取得します。

   locale.T_FMT_AMPM

      時刻を午前／午後の書式で表現するために、 "time.strftime()" の書
      式文字列として用いることのできる文字列を取得します。

   locale.DAY_1
   locale.DAY_2
   locale.DAY_3
   locale.DAY_4
   locale.DAY_5
   locale.DAY_6
   locale.DAY_7

      1 週間中の n 番目の曜日名を取得します。

      注釈:

        ロケール US における、 "DAY_1" を日曜日とする慣行に従っていま
        す。国際的な (ISO 8601) 月曜日を週の初めとする慣行ではありませ
        ん。

   locale.ABDAY_1
   locale.ABDAY_2
   locale.ABDAY_3
   locale.ABDAY_4
   locale.ABDAY_5
   locale.ABDAY_6
   locale.ABDAY_7

      1 週間中の n 番目の曜日名を略式表記で取得します。

   locale.MON_1
   locale.MON_2
   locale.MON_3
   locale.MON_4
   locale.MON_5
   locale.MON_6
   locale.MON_7
   locale.MON_8
   locale.MON_9
   locale.MON_10
   locale.MON_11
   locale.MON_12

      n 番目の月の名前を取得します。

   locale.ABMON_1
   locale.ABMON_2
   locale.ABMON_3
   locale.ABMON_4
   locale.ABMON_5
   locale.ABMON_6
   locale.ABMON_7
   locale.ABMON_8
   locale.ABMON_9
   locale.ABMON_10
   locale.ABMON_11
   locale.ABMON_12

      n 番目の月の名前を略式表記で取得します。

   locale.RADIXCHAR

      基数点 (小数点ドット、あるいは小数点コンマ、等) を取得します。

   locale.THOUSEP

      1000 単位桁区切り (3 桁ごとのグループ化) の区切り文字を取得しま
      す。

   locale.YESEXPR

      肯定／否定で答える質問に対する肯定回答を正規表現関数で認識するた
      めに利用できる正規表現を取得します。

   locale.NOEXPR

      yes/no で答える質問への否定の応答を、"regex(3)" 関数で認識するた
      めに使用できる正規表現を取得します。

      注釈:

        "YESEXPR" と "NOEXPR" の正規表現は、C ライブラリの "regex" 関
        数に適した構文を使用します。 これは "re" の構文と異なる場合が
        あります。

   locale.CRNCYSTR

      通貨シンボルを取得します。シンボルを値の前に表示させる場合には
      "-"、値の後ろに表示させる場合には "+"、シンボルを基数点と置き換
      える場合には "." を前につけます。

   locale.ERA

      ロケール内の各年代における年の数え方と表示方法を記述した文字列を
      取得します。

      ほとんどのロケールではこの値を定義していません。この値を設定して
      いるロケールの例は Japanese です。日本には日付の伝統的な表示法と
      して、時の天皇に対応する元号名があります。

      通常、この値を直接使用する必要はありません。 書式文字列に "E" 修
      飾子を指定すると、"time.strftime()" がこの情報を使用します。 返
      される文字列の形式は、*The Open Group Base Specifications Issue
      8* の 7.3.5.2 LC_TIME C-Language Access で定義されています。

   locale.ERA_D_T_FMT

      日付および時間をロケール固有の年代に基づいた方法で表現するために
      、 "time.strftime()" の書式文字列として用いることのできる文字列
      を取得します。

   locale.ERA_D_FMT

      日付をロケール固有の年代に基づいた方法で表現するために、
      "time.strftime()" の書式文字列として用いることのできる文字列を取
      得します。

   locale.ERA_T_FMT

      時刻をロケール固有の年代に基づいた方法で表現するために、
      "time.strftime()" の書式文字列として用いることのできる文字列を取
      得します。

   locale.ALT_DIGITS

      0 から 99 の値をロケール固有の方法で表す、セミコロンで区切られた
      最大 100 個の記号からなる文字列を取得します。 ほとんどのロケール
      では空文字列です。

   要求された値を決めるカテゴリ ("LC_TIME"、"LC_NUMERIC"、
   "LC_MONETARY"、"LC_MESSAGES") と "LC_CTYPE" のロケールが異なり、結
   果の文字列に非 ASCII 文字が含まれる場合、この関数は "LC_CTYPE" のロ
   ケールをそのカテゴリのロケールに一時的に設定します。 この一時的な変
   更は他のスレッドに影響します。

   バージョン 3.14 で変更: 状況によっては、この関数が "LC_CTYPE" のロ
   ケールを一時的に設定するようになりました。

locale.getdefaultlocale([envvars])

   標準のロケール設定を取得しようと試み、結果をタプル "(language code,
   encoding)" の形式で返します。

   POSIXによると、 "setlocale(LC_ALL, '')" を呼ばなかったプログラムは
   、移植可能な "'C'" ロケール設定を使います。 "setlocale(LC_ALL, '')"
   を呼ぶことで、 "LANG" 変数で定義された標準のロケール設定を使うよう
   になります。 Python では現在のロケール設定に干渉したくないので、上
   で述べたような方法でその挙動をエミュレーションしています。

   他のプラットフォームとの互換性を維持するために、環境変数 "LANG" だ
   けでなく、引数 *envvars* で指定された環境変数のリストも調べられます
   。 最初に見つかった定義が使われます。 *envvars* は標準では GNU
   gettext で使われている検索順になります; このリストには必ず変数名
   "'LANG'" を含める必要があります。 GNU gettext では "'LC_ALL'" 、
   "'LC_CTYPE'" 、 "'LANG'" 、および "'LANGUAGE'" の順に調べられます。

   言語コードは、エンコーディングと "@" 修飾子を除けば ロケール名 と同
   じ形式です。 値を判定できない場合、言語コードやエンコーディングは
   "None" になることがあります。 "C" ロケールは "(None, None)" で表さ
   れます。

locale.getlocale(category=LC_CTYPE)

   指定されたロケールカテゴリの現在の設定を、言語コードとエンコーディ
   ングからなるタプルで返します。 *category* には、"LC_ALL" を除く
   "LC_*" の値を指定できます。 デフォルトは "LC_CTYPE" です。

   言語コードは、エンコーディングを除けば ロケール名 と同じ形式です。
   値を判定できない場合、言語コードやエンコーディングは "None" になる
   ことがあります。 "C" ロケールは "(None, None)" で表されます。

   バージョン 3.15 で変更: "@" 修飾子を黙って取り除くことをやめ、言語
   コードに含めるようになりました。

locale.getpreferredencoding(do_setlocale=True)

   テキストデータに使われる *ロケールエンコーディング* を、ユーザの設
   定に基づいて返します。ユーザの設定は異なるシステム間では異なった方
   法で表現され、システムによってはプログラミング的に得ることができな
   いこともあるので、この関数が返すのはただの推測です。

   システムによっては、ユーザの設定を取得するために "setlocale()" を呼
   び出す必要があるため、この関数はスレッド安全ではありません。
   "setlocale()" を呼び出す必要がない、または呼び出したくない場合、
   *do_setlocale* を "False" に設定する必要があります。

   Android 上、または Python UTF-8 モード が有効な場合は、常に
   "'utf-8'" を返し、*ロケールエンコーディング* と *do_setlocale* 引数
   は無視します。

   Python の事前初期化 で LC_CTYPE ロケールを設定します。 *ファイルシ
   ステムエンコーディングとエラーハンドラ* も参照してください。

   バージョン 3.7 で変更: この関数は、 Android 上あるいは Python UTF-8
   モード が有効になっている場合、常に ""utf-8"" を返すようになりまし
   た。

locale.getencoding()

   現在の *ロケールエンコーディング* を取得します。

   * Android と VxWorks では ""utf-8"" を返します。

   * Unix では、現在の "LC_CTYPE" ロケールのエンコーディングを返します
     。 例えば現在の LC_CTYPE ロケールがサポートされていない場合など、
     "nl_langinfo(CODESET)" が空文字列を返す場合は ""utf-8"" を返しま
     す。

   * Windows では ANSI コードページを返します。

   Python の事前初期化 で LC_CTYPE ロケールを設定します。 *ファイルシ
   ステムエンコーディングとエラーハンドラ* も参照してください。

   この関数は "getpreferredencoding(False)" に似ていますが、Python
   UTF-8 モード を無視する点が異なります。

   Added in version 3.11.

locale.normalize(localename)

   与えたロケール名を規格化したロケールコードを返します。返されるロケ
   ールコードは "setlocale()" で使うために書式化されています。規格化が
   失敗した場合、もとの名前がそのまま返されます。

   与えたエンコードがシステムにとって未知の場合、標準の設定では、この
   関数は "setlocale()" と同様に、エンコーディングをロケールコードにお
   ける標準のエンコーディングに設定します。

locale.strcoll(string1, string2)

   現在の "LC_COLLATE" 設定に従って二つの文字列を比較します。他の比較
   を行う関数と同じように、 *string1* が *string2* に対して前に来るか
   、後に来るか、あるいは二つが等しいかによって、それぞれ負の値、正の
   値、あるいは "0" を返します。

locale.strxfrm(string)

   文字列を、ロケールを考慮した比較に使える形式に変換します。例えば、
   "strxfrm(s1) < strxfrm(s2)" は "strcoll(s1, s2) < 0" と等価です。こ
   の関数は同じ文字列が何度も比較される場合、例えば文字列からなるシー
   ケンスを順序付けて並べる際に使うことができます。

locale.format_string(format, val, grouping=False, monetary=False)

   現在の "LC_NUMERIC" 設定に従って数値 *val* を書式化します。 書式は
   "%" 演算子の規則に従います。 浮動小数点数の場合、必要に応じて小数点
   を変更します。 *grouping* が "True" の場合、桁区切りも反映します。

   *monetary* が真なら、通貨用の桁区切り記号やグループ化文字列を用いて
   変換を行います。

   "format % val" 形式のフォーマット指定子を、現在のロケール設定を考慮
   したうえで処理します。

   バージョン 3.7 で変更: *monetary* キーワード引数が追加されました。

locale.currency(val, symbol=True, grouping=False, international=False)

   数値 *val* を、現在の "LC_MONETARY" の設定にあわせてフォーマットし
   ます。

   *symbol* が真の場合は、返される文字列に通貨記号が含まれるようになり
   ます。これはデフォルトの設定です。*grouping* が "True" の場合(これ
   はデフォルトではありません)は、値をグループ化します。
   *international* が "True" の場合(これはデフォルトではありません)は
   、国際的な通貨記号を使用します。

   注釈:

     この関数は 'C' ロケールでは動作しないので、まず "setlocale()" で
     ロケールを設定する必要があります。

locale.str(float)

   Formats a floating-point number using the same format as the built-
   in function "str(float)", but takes the decimal point into account.

locale.delocalize(string)

   文字列を "LC_NUMERIC" で設定された慣行に従って正規化された数値文字
   列に変換します。

   Added in version 3.5.

locale.localize(string, grouping=False, monetary=False)

   正規化された数値文字列を、"LC_NUMERIC" 設定に従って書式化した文字列
   に変換します。

   Added in version 3.10.

locale.atof(string, func=float)

   *string* に "delocalize()" を適用した結果に *func* を適用し、
   "LC_NUMERIC" 設定に従って文字列を数値に変換します。

locale.atoi(string)

   文字列を "LC_NUMERIC" で設定された慣行に従って整数に変換します。

locale.LC_CTYPE

   文字種を扱う関数のロケールカテゴリです。 特に重要なのは、このカテゴ
   リがテキストのエンコーディング、つまりバイト列を Unicode コードポイ
   ントとして解釈する方法を定義することです。 コンテナ内の無効な設定や
   、リモート SSH 接続で渡される互換性のない設定による問題を避けるため
   に、この変数が自動的に "C.UTF-8" に変更される仕組みについては、
   **PEP 538** と **PEP 540** を参照してください。

   Python は内部で "ctype.h" のロケール依存の文字変換関数を使用しませ
   ん。 代わりに、"pyctype.h" が "Py_TOLOWER" などのロケールに依存しな
   い同等の機能を提供します。

locale.LC_COLLATE

   文字列をソートするためのロケールカテゴリです。 "locale" モジュール
   の "strcoll()" と "strxfrm()" が影響を受けます。

locale.LC_TIME

   時刻を書式化するためのロケールカテゴリです。 "time.strftime()"  は
   このカテゴリに設定されている慣行に従います。

locale.LC_MONETARY

   金額に関係する値を書式化するためのロケールカテゴリです。設定可能な
   オプションは関数 "localeconv()" で得ることができます。

locale.LC_MESSAGES

   メッセージ表示のためのロケールカテゴリです。現在 Python はアプリケ
   ーション毎にロケールに対応したメッセージを出力する機能はサポートし
   ていません。 "os.strerror()" が返すような、オペレーティングシステム
   によって表示されるメッセージはこのカテゴリによって影響を受けます。

   POSIX 標準に準拠していない OS、特に Windows では、この値が利用でき
   ない場合があります。

locale.LC_NUMERIC

   数値を書式化するためのロケールカテゴリです。 "locale" モジュールの
   "format_string()"、"atoi()"、"atof()"、"str()" がこのカテゴリの影響
   を受けます。 それ以外の数値の書式化操作には影響しません。

locale.LC_ALL

   全てのロケール設定を総合したものです。ロケールを変更する際にこのフ
   ラグが使われた場合、そのロケールにおける全てのカテゴリを設定しよう
   と試みます。一つでも失敗したカテゴリがあった場合、全てのカテゴリに
   おいて設定変更を行いません。このフラグを使ってロケールを取得した場
   合、全てのカテゴリにおける設定を示す文字列が返されます。この文字列
   は、後に設定を元に戻すために使うことができます。

locale.CHAR_MAX

   "localeconv()" の返す特別な値のためのシンボル定数です。


ロケールの背景、詳細、ヒント、助言および補足説明
================================================

C 標準では、ロケールはプログラム全体に適用される特性で、その変更には比
較的大きなコストが掛かることがあります。 さらに、実装によっては不具合
があり、ロケールを頻繁に変更するとコアダンプが起きる場合があります。
そのため、ロケールを正しく使うのはやや厄介です。

最初、プログラムが起動したときには、ユーザの希望するロケールにかかわら
ずロケールは "C" です。例外が1つあります: "LC_CTYPE" カテゴリは、現在
のロケールエンコーディングをユーザーの希望するロケールエンコーディング
に設定するために、スタートアップで変更されます。他のカテゴリについては
、プログラムは "setlocale(LC_ALL, '')" を呼び出して、明示的にユーザの
希望するロケール設定を行わなければなりません。

"setlocale()" をライブラリルーチン内で呼ぶことは、それがプログラム全体
に及ぼす副作用の面から、一般的によくない考えです。 ロケールを保存した
り復帰したりするのもよくありません: 高価な処理であり、ロケールの設定が
復帰する以前に実行される他のスレッドに悪影響を及ぼすからです。

もし、汎用を目的としたモジュールを作っていて、ロケールによって影響をう
けるような操作 (例えば "time.strftime()" の書式の一部) のロケール独立
のバージョンが必要ということになれば、標準ライブラリルーチンを使わずに
何とかしなければなりません。 それよりも、ロケール設定に従う動作で問題
ないと判断できれば、その方がよいでしょう。 最後の手段は、あなたのモジ
ュールが "C" ロケール以外の設定には互換性がないとドキュメントに書くこ
とです。

ロケールに従って数値を処理する唯一の方法は、このモジュールが定義する専
用の関数 "atof()"、"atoi()"、"format_string()"、"str()" を使用すること
です。

ロケールに従ってケース変換や文字分類を行う方法はありません。 (ユニコー
ド) テキスト文字列については、これらは文字の値のみによって行われます。
その一方、バイト文字列はバイトの ASCII 値に従って変換と分類が行われま
す。そして、上位ビットが立っているバイト (すなわち、non-ASCII バイト)
は、決して変換されず、英字や空白などの文字クラスの一部とみなされること
もありません。


ロケール名
==========

ロケール名の形式はプラットフォームに依存し、サポートされるロケールの集
合はシステムの構成によって異なる場合があります。

POSIX プラットフォームでは、通常は次の形式です [1]。

     language ["_" territory] ["." charset] ["@" modifier]

ここで *language* は ISO 639 の 2 文字または 3 文字の言語コード、
*territory* は ISO 3166 の 2 文字の国・地域コード、*charset* はロケー
ルエンコーディングです。 *modifier* は、文字体系名、言語サブタグ、照合
順序の識別子、またはその他のロケール修飾子です (例: "latin"、
"valencia"、"stroke"、"euro")。

Windows はいくつかの形式をサポートしています [2] [3]。 IETF BCP 47 タ
グのサブセットは次の形式です。

     language ["-" script] ["-" territory] ["." charset]
     language ["-" script] "-" territory "-" modifier

ここで *language* と *territory* の意味は POSIX と同じです。 *script*
は ISO 15924 の 4 文字の文字体系コードで、*modifier* は言語サブタグ、
照合順序の識別子、またはカスタムの修飾子です (例: "valencia"、"stroke"
、"x-python")。 区切りにはハイフン ("'-'") とアンダースコア ("'_'") の
両方が使えます。 BCP 47 タグで使用できるエンコーディングは UTF-8 のみ
です。

Windows は次の形式のロケール名もサポートしています。

     language ["_" territory] ["." charset]

ここで *language* と *territory* は "English"、"United States" などの
完全な名前で、*charset* はコードページ番号 (例: "1252") または UTF-8
です。 この形式では、区切りにアンダースコアのみを使用できます。

"C" ロケールはすべてのプラットフォームでサポートされています。

[1] IEEE Std 1003.1-2024; 8.2 Internationalization Variables

[2] UCRT のロケール名、言語、国・地域の文字列

[3] ロケール名


Python 拡張の作者と、Python を埋め込むようなプログラムに関して
==============================================================

拡張モジュールは、現在のロケールを調べる以外は、決して "setlocale()"
を呼び出してはなりません。しかし、返される値もロケールの復帰のために使
えるだけなので、さほど便利とはいえません (例外はおそらくロケールが "C"
かどうか調べることでしょう)。

Python コードが "locale" モジュールでロケールを変更すると、Python を埋
め込んでいるアプリケーションにも影響します。 それを避けたい場合は、実
際の処理を行う "_locale" 拡張モジュールを "config.c" の組み込みモジュ
ールの表から取り除き、共有ライブラリとしても "_locale" にアクセスでき
ないようにしてください。


メッセージカタログへのアクセス
==============================

locale.gettext(msg)

locale.dgettext(domain, msg)

locale.dcgettext(domain, msg, category)

locale.textdomain(domain)

locale.bindtextdomain(domain, dir)

locale.bind_textdomain_codeset(domain, codeset)

C ライブラリの gettext インタフェースが提供されているシステムでは、
locale モジュールでそのインタフェースを公開しています。 このインタフェ
ースは関数 "gettext()" 、 "dgettext()" 、 "dcgettext()" 、
"textdomain()" 、 "bindtextdomain()" 、および
"bind_textdomain_codeset()" からなります。 これらは "gettext" モジュー
ルの同名の関数に似ていますが、メッセージカタログとして C ライブラリの
バイナリフォーマットを使い、メッセージカタログを探すために C ライブラ
リのサーチアルゴリズムを使います。

通常、Python アプリケーションがこれらの関数を呼び出す必要はなく、代わ
りに "gettext" を使用するべきです。 既知の例外は、内部で C 関数の
"gettext" や "dcgettext" を呼び出す追加の C ライブラリとリンクするアプ
リケーションです。 このようなアプリケーションでは、ライブラリがメッセ
ージカタログを正しく見つけられるように、テキストドメインのバインドが必
要になる場合があります。
