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_translations
(gettext
および関連ツールでサポートされている .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つの手順が必要です
POT 翻訳ファイルを生成する
xgettext --language=Python --keyword=_:1,2 -d mydomain file1.py file2.html etc
既存の POT ファイルとマージする
msgmerge old.po mydomain.po > new.po
コンパイルする
msgfmt mydomain.po -o {directory}/pt_BR/LC_MESSAGES/mydomain.mo
- class tornado.locale.Locale(code: str)[ソース]¶
ロケールを表すオブジェクト。
load_translations
またはload_gettext_translations
のいずれかを呼び出した後、get
またはget_closest
を呼び出して Locale オブジェクトを取得します。- 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
を指定すると、曜日を削除できます。
- 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の新機能です。