tornado.locale — 国際化対応

ローカライズされた文字列を生成するための翻訳メソッド。

ロケールを読み込んで翻訳された文字列を生成するには

user_locale = tornado.locale.get("es_LA")
print(user_locale.translate("Sign out"))

tornado.locale.get() は、要求された特定のロケールではなく、最も近い一致するロケールを返します。 translate() に追加の引数を指定することで、複数形に対応できます。例えば、

people = [...]
message = user_locale.translate(
    "%(list)s is online", "%(list)s are online", len(people))
print(message % {"list": user_locale.list(people)})

len(people) == 1 の場合は最初の文字列が、それ以外の場合は2番目の文字列が選択されます。

アプリケーションは、load_translations(単純な CSV 形式を使用)または load_gettext_translationsgettext および関連ツールでサポートされている .mo 形式を使用)のいずれかを呼び出す必要があります。どちらのメソッドも呼び出されない場合、Locale.translate メソッドは単に元の文字列を返します。

tornado.locale.get(*locale_codes: str) Locale[ソース]

指定されたロケールコードに最も近い一致を返します。

指定されたすべてのロケールコードを順番に反復処理します。コードに対して完全一致または部分一致(例:「en_US」に対して「en」)がある場合、ロケールを返します。それ以外の場合は、リストの次のコードに移動します。

デフォルトでは、指定されたロケールのいずれにも翻訳が見つからない場合、en_US を返します。 set_default_locale() を使用してデフォルトのロケールを変更できます。

tornado.locale.set_default_locale(code: str) None[ソース]

デフォルトのロケールを設定します。

デフォルトのロケールは、システム内のすべての文字列に使用される言語とみなされます。ディスクからロードされる翻訳は、デフォルトのロケールから目的のロケールへのマッピングです。そのため、デフォルトのロケール用の翻訳ファイルを作成する必要はありません。

tornado.locale.load_translations(directory: str, encoding: Optional[str] = None) None[ソース]

ディレクトリ内の CSV ファイルから翻訳を読み込みます。

翻訳は、オプションの Python スタイルの名前付きプレースホルダー(例:My name is %(name)s)とその関連翻訳を含む文字列です。

ディレクトリには、LOCALE.csv 形式の翻訳ファイル(例:es_GT.csv)が必要です。CSV ファイルには、文字列、翻訳、オプションの複数形インジケータの 2 つまたは 3 つの列が必要です。複数形インジケータは、「plural」または「singular」のいずれかである必要があります。指定された文字列は、単数形と複数形の両方を持つことができます。たとえば、%(name)s liked this は、%(name)s が 1 つの名前か名前のリストかによって、異なる動詞の活用形を持つ場合があります。CSV ファイルには、その文字列に対して 2 つの行が必要です。1 つは複数形インジケータ「singular」、もう 1 つは「plural」です。翻訳時に変化しない動詞のない文字列の場合は、単に「unknown」または空の文字列を使用するか、列をまったく含めないでください。

ファイルは、デフォルトの「excel」方言で csv モジュールを使用して読み取られます。この形式では、コンマの後にスペースがあってはなりません。

encoding パラメータが指定されていない場合、ファイルにバイトオーダーマーク(BOM)が含まれている場合、エンコーディングは自動的に検出されます(UTF-8 と UTF-16 の間)。BOM が存在しない場合は、デフォルトで UTF-8 になります。

翻訳例 es_LA.csv

"I love you","Te amo"
"%(name)s liked this","A %(name)s les gustó esto","plural"
"%(name)s liked this","A %(name)s le gustó esto","singular"

バージョン 4.3 で変更されました: encoding パラメータが追加されました。BOM ベースのエンコーディング検出、UTF-16、および BOM 付き UTF-8 のサポートが追加されました。

tornado.locale.load_gettext_translations(directory: str, domain: str) None[ソース]

gettext のロケールツリーから翻訳を読み込みます

ロケールツリーは、システムの /usr/share/locale のようなものです。例:

{directory}/{lang}/LC_MESSAGES/{domain}.mo

アプリケーションを翻訳するには、3つの手順が必要です

  1. POT 翻訳ファイルを生成する

    xgettext --language=Python --keyword=_:1,2 -d mydomain file1.py file2.html etc
    
  2. 既存の POT ファイルとマージする

    msgmerge old.po mydomain.po > new.po
    
  3. コンパイルする

    msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
    
tornado.locale.get_supported_locales() Iterable[str][ソース]

サポートされているすべてのロケールコードのリストを返します。

class tornado.locale.Locale(code: str)[ソース]

ロケールを表すオブジェクト。

load_translations または load_gettext_translations のいずれかを呼び出した後、get または get_closest を呼び出して Locale オブジェクトを取得します。

classmethod get_closest(*locale_codes: str) Locale[source]

指定されたロケールコードに最も近い一致を返します。

classmethod get(code: str) Locale[source]

指定されたロケールコードに対応するロケールオブジェクトを返します。

サポートされていない場合は、例外が発生します。

translate(message: str, plural_message: Optional[str] = None, count: Optional[int] = None) str[source]

このロケールにおける、指定されたメッセージの翻訳を返します。

plural_message が指定されている場合は、count も指定する必要があります。count != 1 の場合は plural_message を返し、count == 1 の場合は指定されたメッセージの単数形を返します。

format_date(date: Union[int, float, datetime], gmt_offset: int = 0, relative: bool = True, shorter: bool = False, full_format: bool = False) str[source]

指定された日付をフォーマットします。

デフォルトでは、相対時間(例:「2分前」)を返します。relative=False を指定すると、絶対日付文字列を返すことができます。

full_format=True を指定すると、完全な形式の日付(「1980年7月10日」)を強制的に返すことができます。

このメソッドは、主に過去の日付を対象としています。将来の日付の場合は、完全な形式にフォールバックします。

バージョン 6.4 で変更: タイムゾーン情報のない datetime.datetime オブジェクトがサポートされるようになりました (ナイーブな datetime は引き続き UTC とみなされます)。

format_day(date: datetime, gmt_offset: int = 0, dow: bool = True) bool[source]

指定された日付を曜日としてフォーマットします。

例:「月曜日、1月22日」。dow=False を指定すると、曜日を削除できます。

list(parts: Any) str[source]

指定された要素のリストをカンマ区切りのリストとして返します。

フォーマットは、例えば、サイズ1のリストの場合は「A」、サイズ2のリストの場合は「AとB」、サイズ3以上のリストの場合は「A、B、そしてC」のようになります。

friendly_number(value: int) str[source]

指定された整数を、カンマ区切りの数値として返します。

class tornado.locale.CSVLocale(code: str, translations: Dict[str, Dict[str, str]])[source]

TornadoのCSV翻訳フォーマットを使用するロケール実装です。

class tornado.locale.GettextLocale(code: str, translations: NullTranslations)[source]

gettext モジュールを使用するロケール実装です。

pgettext(context: str, message: str, plural_message: Optional[str] = None, count: Optional[int] = None) str[source]

翻訳にコンテキストを設定することを可能にし、複数形を受け入れます。

使用例

pgettext("law", "right")
pgettext("good", "right")

複数形のメッセージ例

pgettext("organization", "club", "clubs", len(clubs))
pgettext("stick", "club", "clubs", len(clubs))

コンテキスト付きのPOTファイルを生成するには、load_gettext_translations シーケンスのステップ1に次のオプションを追加します。

xgettext [basic options] --keyword=pgettext:1c,2 --keyword=pgettext:1c,2,3

バージョン4.2の新機能です。