WordPressウェブサイトを国際化する方法
公開: 2022-03-102017年9月30日、国際的なWordPressコミュニティが24時間団結し、WordPressエコシステムを翻訳しました。 #WPTranslationDayは、3回目となる、終日の翻訳マラソンと、「ローカリゼーション」としてよく知られている、グローバルユーザーがアクセシブルなエクスペリエンスを作成することの価値を促進するように設計されたデジタルおよび寄稿者の日イベントを融合しました。
オープンソースコミュニティとして、私たちは皆、オープンソースの貢献をローカライズするよう努めるべきです。 ただし、デジタルアセットを転記する前に、コードベースを国際化する必要があります。
「国際化」と「ローカリゼーション」という用語は、技術的には翻訳プロセスの2つの異なる側面を表していますが、しばしば同じ意味で使用されます。
- 国際化(I18N)は、テーマまたはプラグインを国際化または適応させて、世界中の任意の言語に翻訳するプロセスです。
- ローカリゼーション(L10N)は、ローカライズ、または国際化されたツールを特定の言語に翻訳する後続のプロセスです。
WordPressは現在、65以上の言語に完全にローカライズされており、さらに95のロケールに部分的な翻訳を提供しています。 より多くのローカリゼーションが導入されるにつれて、国際的な使用は増え続けています。
英語を話さないWordPressユーザーは2014年に英語を話すユーザーを上回り、#WPTranslateDayのような取り組みが進むにつれて、2017年も英語ユーザーのパイの割合をうっかり薄めてしまいました。
WordPressがますます言語的にアクセス可能になるにつれて、I18NとL10Nの知識は、プラグインとテーマの開発者がグローバルなWordPress経済で成功するために不可欠です。 ビジネスを拡大するために、これらの開発スキルは海外市場への扉を開くことができます。 言語アクセシビリティを含むWebアクセシビリティは、ビジネスにとっても、人々にとっても優れています。
#WPTranslationDayの続きとして、WordPressプラグインとテーマを国際化するための更新されたガイドがあります。
これが、今日調査するプロセスの概要です。
- 発見
- 翻訳ファイルを知る
- POTファイル
- POファイル
- MOファイル
- GlotPressと言語パック
- 環境のバックアップと準備
- 翻訳ファイルを知る
- プラグインI18N
- プラグインヘッダー
- テキストドメインを読み込む
- 文字列監査
- POTファイルを生成する
- テーマI18N
- テーマヘッダー
- テキストドメインを読み込む
- 文字列監査
- POTファイルを生成する
- JavaScript I18N
- 追加リソース
発見
翻訳ファイルを知る
WordPressはGNUgettextライブラリを使用してI18Nを促進します。
まず、プロセス全体で生成されるgettext翻訳ファイルについて理解しましょう。
ポータブルオブジェクトテンプレートファイル(POT)
I18Nプロセス中に、ツールを使用して国際化された文字列を検索し、プラグインとテーマのすべての翻訳可能なテキストを含むPOTファイルを生成します。
ポータブルオブジェクトファイル(PO)
外観上、POTファイルとPOファイルの間に顕著な違いはありません。 それらは構文的に同じであり、意図された目的によってのみ区別されます。
POTファイルを生成した後、テキスト文字列は翻訳者が希望する言語に解釈する必要があります。 POファイルには、最終的には母国語のテキスト文字列と適切な翻訳が含まれます。
マシンオブジェクトファイル(MO)
最後に、POファイルは機械可読ドキュメントまたは機械オブジェクトファイルに変換されます。 このファイルは、翻訳されたバージョンを提供するときにWordPressが呼び出すテーマまたはプラグインディレクトリにあります。
環境のバックアップと準備
マークアップを変更する前に、プラグイン、テーマ、またはサイト全体(国際化するものは何でも!)のバックアップを取り、開発環境を整えてください。
Webサイトをローカライズする予定がある場合は、プラグインの簡単な監査を必ず行ってください。 アクティブに使用しなくなったプラグインを削除または非アクティブ化します。 この迅速な監査により、長期的には時間を節約できます。
プラグインを国際化する
プラグインヘッダー
まず、プラグインヘッダーを更新します。 具体的には、テキストドメインとドメインパスです。
プラグインヘッダーの例
/* Plugin Name: My Rad Plugin Plugin URI: https://myradplugin.com Description: Custom Plugin That Makes My Site Rad Author: Rad Plugin Creator Version: 1.0 Author URI: https://radplugincreator.com Text Domain: rad-plugin Domain Path: /languages/ */
テキストドメイン
テキストドメインは、プラグインに属するすべてのテキストを認識するためのWordPressの一意の識別子であり、プラグインのスラッグと一致する必要があります。
プラグインがWordPress.orgでホストされている場合、これは特に重要です。 GlotPressがプラグインの翻訳を適切にインポートするには、これらが一致する必要があります。
この例では、プラグインファイルの名前はrad-plugin.phpで、テキストドメインはrad-pluginです。
すでにテキストドメインが設定されている可能性があります。 そうでない場合は、アンダースコアではなくハイフンを使用することを忘れないでください。
ドメインパス
ドメインパスは、完成した翻訳ファイルが存在するフォルダーです。プラグインディレクトリ内に/ languages /などの新しいフォルダーを作成し、ドメインパスを更新して、WordPressが翻訳ファイルの検索場所を正確に認識できるようにする必要があります。
テキストドメインを読み込む
次に、コードに次の関数を追加して、テキストドメインを読み込みます。
load_plugin_textdomain()
load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path );
ユーザーの言語の翻訳ファイルが利用可能な場合、テキストドメインの読み込み機能はWordPressにそれを配信するように指示します。
パラメーター
- $ domain —テキストドメイン(必須)
- $ abs_rel_path — false (オプション、非推奨)
- $ plugin_rel_path — / languages / (オプション、これは翻訳ファイルを含むディレクトリへの相対パスです。この例では/ languages /です。4.6以降、WordPressはプラグインの/ languages /ディレクトリでこれらのファイルを検索します。不特定になります。)
Radプラグインの例
テキストドメインをロードするには、「plugins_loaded」アクションにフックします。
add_action( 'plugins_loaded', 'rad_plugin_load_text_domain' ); function rad_plugin_load_text_domain() { load_plugin_textdomain( 'rad-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' ); }
ストリングス監査
次のステップは、プラグインのすべてのテキスト文字列を翻訳関数でラップすることです。
最も一般的な変換関数は、変換された文字列を返すための__()
と、変換された文字列をエコーするための_e()
です。
Radプラグインの例
__() $text = __( 'Super Rad!', 'rad-plugin' );
この関数は、単純な翻訳で機能します。 2つのパラメータが考慮されます。 テキスト文字列とテキストドメイン。
_e( 'Super Rad!', 'rad-plugin' );
この関数は単に値をエコーします。 それ以外の場合は、前の関数とまったく同じように機能します。
必要に応じて使用する必要のある追加の翻訳機能が多数あります。
その他の基本機能
__() _e() _x() _ex() _n() _nx() _n_noop() _nx_noop() translate_nooped_plural()
日付と数値の関数
number_format_i18n() date_i18n()
エスケープ機能
次のエスケープ関数を使用して、出力されているデータをエスケープすることを忘れないでください。
esc_html__() esc_html__() esc_html_x() esc_attr__() esc_attr_e() esc_attr_x()
Radの例では、次のようなプラグインコードの行があります。
function create_section() { esc_html_e( 'Below are your settings for Rad Plugin', 'rad-plugin' ); }
ポットファイルを作成する
最後のステップは、POTファイルを作成することです。 このタイプのファイルを生成するために利用できるツールはいくつかありますが、このチュートリアルでは、WordPressコーデックスの推奨事項に固執し、翻訳を管理するための使いやすいGUIであるPoeditを使用します。
注:プラグインまたはテーマがすでにWordPress.orgリポジトリにある場合は、このプロセスをスキップして、管理ページからPOTファイルを生成できます。 この場合、言語ごとに.poファイルを生成する必要はありません。 2015年にGlotPressと言語パックが導入されたことで、翻訳プロセスが簡素化されました。 GlotPressに必要なのは.potファイルだけです。このファイルは、WordPress.orgによってインポートされ、translate.wordpress.orgダッシュボードを介して翻訳者に提供されます。 世界中の協力者がこのダッシュボードを使用して、#WPTranslateDayに翻訳を提供します。
Poeditをダウンロード
Poeditの設定
翻訳プロパティ
[ファイル]> [新規]に移動することから始めます。 次に、プラグインの母国語を選択し、[ OK]をクリックします。
次に、[カタログ] > [新規]を選択します。 プロジェクト名、バージョン、連絡先、言語を入力します。
パス
次に、[ソースパス]タブを選択します。 これが新しいファイルの場合は、最初にファイルを保存する必要があります。
この例に従って、[ファイル]> [名前を付けて保存]を選択して、rad-plugin内の/ languages /ディレクトリに.poファイルとして保存します。 この場合も、ファイル名はプラグインのスラッグと一致する必要があります。
rad-plugin.po
保存後、翻訳ファイルが保存されるディレクトリへの相対パスを入力します。このシナリオでは、言語。
キーワード
[ソースキーワード]タブを選択します。 +アイコンをクリックして、適切な関数名を追加します。
カンニングペーパー
__ _e _x _ex _n _nx _n_noop _nx_noop translate_nooped_plural number_format_i18n date_i18n esc_html__ esc_html__ esc_html_x esc_attr__ esc_attr_e esc_attr_x
その後、[OK]をクリックし、 [ファイル]> [保存]をクリックします。
Poeditは.moファイルと.poファイルの両方を保存します。 .poファイルをコピーして.pot拡張子を追加することにより、.potファイルを作成できます。 海外のユーザーは、テンプレートの.potファイルを使用して、文字列を自分の言語に翻訳できます。
テーマを国際化する
テーマを国際化するプロセスは、プラグインのI18Nと実質的に同じです。 テーマヘッダーを確認することから始め、別のPOTファイルを生成することで終わります。
テーマヘッダー
テーマヘッダーを再確認して、テキストドメインとドメインパスが設定されていることを確認してください。
テーマヘッダーの例
/* Theme Name: Rad Theme Author: Rad Theme Author Text Domain: rad-theme Domain Path: /languages/ */
テキストドメインを読み込む
次のステップは、今回はテーマのfunctions.phpファイルにテキストドメインをロードすることです。
load_theme_textdomain()
load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' );
これらのファイルをロードするには、after_setup_themeアクションでファイルを登録する必要があります。
add_action( 'after_setup_theme', 'rad_theme_setup' ); function rad_theme_setup() { load_theme_textdomain( 'radtheme', get_template_directory() . '/languages' ); }
ストリングス監査
別の文字列監査の時間です! この時点で、基本的な翻訳機能に精通している必要があります。
トリッキーな翻訳を見てみましょう。
プレースホルダー
以下の例のようなPHP変数は、プレースホルダーを使用しないと適切に変換されません。
echo "We added $count rad points.";
printf()&sprintf()
これらの関数は、 %sや整数の場合は%dなどのプレースホルダーを使用して、動的コンテンツを含むテキストの文字列を補間します。
Radテーマの例
/* Translators: %d is the number of rad points added */ printf( esc_html__( 'We added %d rad points.', 'rad-plugin' ), $count );
複数形
_n()
関数は、複数形などのより複雑な文字列翻訳を処理できますが、翻訳ソフトウェア内の制限があるため、お勧めしません。 代わりに、単数形と複数形を区別するための単純なifステートメントを記述できます。
Radプラグインの例
If ( 1 === $rad_points_found ) { $message = __( '1 rad point', 'rad-plugin' ); } else { /* Translators: %s is the number of rad points found */ $message = sprintf( __( '%s rad points' , 'rad-plugin' ) , $rad_points_found ); }
ポットファイルを生成
テーマPOTファイルを生成するプロセスは、プラグインPOTファイルを生成するプロセスと同じです。 以下のいくつかの方法を調べてください。
コマンドライン
WordPressトランクとgettextGNUパッケージがインストールされている場合、コマンドラインでmakepot.phpスクリプトを実行することで、この手順を簡単に実行できます。
コマンドラインを開き、I18Nツールディレクトリに移動します。
cd wpdev/tools/i18n/
スクリプトは次のようになります。
php path/to/makepot.php wp-theme path/to/rad-theme rad-theme.pot
スクリプトがその処理を実行し、完成したファイルrad-theme.potが現在のディレクトリに配置されます。
グラントタスク
POTファイルを作成する別の方法は、grunt-wp-i18nまたはgrunt-potのいずれかを使用してGruntタスクを実行することです。 Gruntのようなタスクランナーは、POTファイルの生成など、多くの面倒なタスクを自動化できます。
POTファイルを作成するには、最初にnode.jsがインストールされていることを確認してください。 次に、コマンドラインから言語ディレクトリにGruntをインストールすると、すぐに使用できます。 これで、これらのI18Nコマンドをすばやく実行して、コマンドラインの快適さを離れることなく翻訳ファイルを作成できます。
JavaScript I18N
最新のテーマまたはプラグイン開発者の場合、JavaScriptを使用してプロジェクトの一部のコンポーネントを処理している可能性があります。 wp_localize_scriptは、スクリプトに提供するPHPデータを抽出するための効果的な関数であり、WordPress内でJavaScriptを翻訳する唯一の方法です。
WP_LOCALIZE_SCRIPT()
この関数を使用すると、PHPでサーバー側の文字列をローカライズし、JavaScriptオブジェクトとしてテキスト文字列をスクリプトに提供できます。
wp_localize_script( $handle, $name, $data );
パラメーター
- $ handle —データが利用可能である必要があるスクリプトハンドル(必須—このデータが使用されるスクリプトのハンドルと一致する必要があります。以下の例を参照してください)
- $ name —データを含むオブジェクトの名前(必須—一意である必要があります)
- $ data —スクリプトに渡すデータの配列(必須) 。
RADプラグインの例
add_action( 'wp_enqueue_scripts', 'rad_theme_scripts' ); function rad_theme_scripts() { wp_enqueue_script( 'rad-theme-script', get_template_directory_url() . '/js/rad-theme-script.js' ); wp_localize_script( 'rad-theme-script', 'rad-I18n', array( 'message' => __( 'Super Rad!', 'rad-theme' ), ) ); }
JAVASCRIPTのデータにアクセスする
以下の簡単なコードスニペットは、JavaScriptファイルでこのデータにアクセスする方法の例です。
alert( rad-I18n.message );
追加リソース
- WordPress開発者向けのI18N
- WordPressテーマハンドブック:国際化
- WordPressプラグインハンドブック:国際化
- WordPress.tv:I18N
まとめ
おめでとう! テーマやプラグインを国際化したばかりで、すべての母国語の人々が利用できるようになりました。 プロジェクトがWordPressリポジトリを介して配布されている場合でも、組織のWebサイト用にカスタム開発されている場合でも、ファイルを最初から国際化することには利点があります。
- オープンソースの貢献をグローバルにアクセスできるようにします。
- 海外市場の新規顧客との会話を作成します。
- 時間を節約し、将来の面倒な更新を減らします。
常に国際化する。