国際化とは何ですか?
国際化とは、テーマを開発するプロセスであり、他の言語に簡単に翻訳できるようにすることです。国際化はしばしば i18n
と略されます(i と n の間に18文字があるためです)。
なぜ国際化が重要なのですか?
WordPressは、英語が主要な言語でない国々を含む世界中で使用されています。WordPressプラグイン内の文字列は、他の言語に簡単に翻訳できるように特別な方法でコーディングする必要があります。開発者として、すべてのユーザーに対してローカライズを提供することはできないかもしれませんが、翻訳者はソースコード自体を変更することなくテーマを成功裏にローカライズできます。
テーマを国際化するにはどうすればよいですか?
テーマ内のテキストが簡単に翻訳できるようにするためには、テキストをテーマ内にハードコーディングするのではなく、WordPressのローカリゼーション関数の1つを通じて引数として渡す必要があります。
次の例は、翻訳者がソースコードを変更しない限り翻訳できませんが、これは非常に効率的ではありません。
<h1>Settings Page</h1>
文字列をローカリゼーション関数を通じて渡すことで、簡単に解析して翻訳できるようになります。
<h1><?php _e( 'Settings Page' ); ?></h1>
WordPressはgettextライブラリを使用して、PHPで翻訳を追加できるようにしています。WordPressでは、ネイティブのPHP gettext準拠の翻訳関数の代わりに、WordPressのローカリゼーション関数を使用する必要があります。
テキストドメイン
テキストドメインは、国際化関数で使用される2番目の引数です。テキストドメインは、すべての読み込まれた翻訳を区別するためのユニークな識別子です。テキストドメインは、テーマとプラグインに対してのみ定義する必要があります。
WordPress.orgにホストされているテーマでは、テキストドメインはテーマURLのスラッグ(wordpress.org/themes/<slug>
)と一致する必要があります。これは、translate.wordpress.orgからの翻訳が正しく機能するために必要です。
テキストドメイン名はダッシュを使用し、アンダースコアは使用せず、小文字である必要があります。たとえば、テーマ名 My Theme
が style.css
に定義されている場合、または my-theme
というフォルダーに含まれている場合、テキストドメインは my-theme
である必要があります。
テキストドメインは、次の3つの異なる場所で使用されます:
- 1.
style.css
テーマヘッダー内 - 2. ローカリゼーション関数の引数として
- 3.
load_theme_textdomain()
またはload_child_theme_textdomain()
を使用して翻訳を読み込むときの引数として
style.css テーマヘッダー
テキストドメインは style.css
ヘッダーに追加され、テーマが有効でない場合でも説明などのテーマメタデータが翻訳できるようになります。テキストドメインは、テキストドメインを読み込むときに使用されるものと同じである必要があります。
例:
/*
* Theme Name: My Theme
* Author: Theme Author
* Text Domain: my-theme
*/
ドメインパス
ドメインパスは、翻訳が languages
以外のディレクトリに保存されている場合に必要です。これは、テーマがアクティブでないときにWordPressが翻訳を見つける場所を知るためです。たとえば、.moファイルがlanguagesフォルダーにある場合、ドメインパスは /languages
であり、最初のスラッシュで書く必要があります。デフォルトでは、テーマ内の languages
フォルダーになります。
例:
/*
* Theme Name: My Theme
* Author: Theme Author
* Text Domain: my-theme
* Domain Path: /languages
*/
文字列にテキストドメインを追加する
テキストドメインは、翻訳が正しく機能するためにすべてのローカリゼーション関数に引数として追加する必要があります。
例 1:
__( 'Post' )
は次のようになります
__( 'Post', 'my-theme' )
例 2:
_e( 'Post' )
は次のようになります
_e( 'Post', 'my-theme' )
例 3:
_n( '%s post', '%s posts', $count )
は次のようになります
_n( '%s post', '%s posts', $count, 'my-theme' )
テキストドメインは、変数の代わりに文字列としてローカリゼーション関数に渡す必要があります。これにより、解析ツールがテキストドメインを区別できるようになります。やってはいけないことの例:
__( 'Translate me.' , $text_domain );
翻訳の読み込み
WordPressの翻訳は、.po
および .mo
ファイルに保存され、読み込む必要があります。これらは、load_theme_textdomain()
または load_child_theme_textdomain()
の関数を使用して読み込むことができます。これにより、テーマのベースディレクトリから {locale}.mo
が読み込まれるか、{text-domain}-{locale}.mo
が /wp-content/languages/themes/
のWordPressテーマ言語フォルダーから読み込まれます。
バージョン4.6以降、WordPressはtranslate.wordpress.orgからの翻訳のために wp-content
の言語ディレクトリを自動的にチェックします。これは、translate.wordpress.orgを介して翻訳されたプラグインがもはや load_plugin_textdomain()
を必要としないことを意味します。
プラグインに load_plugin_textdomain()
コールを追加したくない場合は、readme.txtの Requires at least:
フィールドを4.6に設定する必要があります。
異なる言語および国コードについての詳細は、言語のリストを参照してください。
注意
- テーマフォルダーに翻訳を追加する場合は、MOファイルを
{locale}.mo
と名付けます(例:de_DE.po & de_DE.mo)。 - WordPressテーマ言語フォルダーに翻訳を追加する場合は、MOファイルを
{text-domain}-{locale}.mo
と名付けます(例:my-theme-de_DE.po & my-theme-de_DE.mo)。
例:
function my_theme_load_theme_textdomain() {
load_theme_textdomain( 'my-theme', get_template_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'my_theme_load_theme_textdomain' );
この関数は理想的にはテーマの function.php
内で実行されるべきです。
言語パック
言語パックと、translate.wordpress.orgへのインポートがどのように機能しているかに興味がある場合は、翻訳に関するメタハンドブックページをお読みください。
テーマの国際化
翻訳が読み込まれたので、国際化関数を使用してテーマ内のすべての文字列を書くことができます。
詳細情報とベストプラクティスについては、一般APIハンドブックの国際化ページを確認してください。