WordPressの翻訳を変更する場合、その多くがpoファイルを変更する方法を紹介されています。
でも、これってコアファイルの改変に近いし、アップデートするたびに同じ内容の修正を行わなければならないのも大変ですよね。
で、今回はpoファイルを修正しなくても、翻訳を独自のテキストに変更する方法を試してみます。
WordPressには、1500以上のフックが存在していますが、その中には翻訳されたテキストに対するフックも存在しています。このフックを用いて翻訳されたテキストを差し替える処理を行えば、poファイルの編集を行わずに表示される日本語訳を修正することが可能になるというわけです。
サンプルとして、管理画面の「投稿」を「最新情報」として表示させるようにしてみます。
CODE 1
function custom_gettext( $translated, $text, $domain ) { $custom_translates = array( 'default' => array( '投稿' => '最新情報', ) ); if ( isset( $custom_translates[$domain] ) ) { $translated = str_replace( array_keys( $custom_translates[$domain] ), $custom_translates[$domain], $translated ); } return $translated; } add_filter( 'gettext', 'custom_gettext', 10, 3 );
結果はこの通り、メニューの「投稿」は、「最新情報」に変更されていますが、ダッシュボードや投稿一覧のタイトルの「投稿」は変更されていません。
どうしてこうなるのかというと、ダッシュボードの「投稿」は単数/複数の翻訳が、投稿一覧のタイトルの「投稿」は文脈変換の翻訳が使われていて、CODE 1で使用した gettext とは異なるフックを通っているからです。
単数/複数の表現は日本語では(ほぼ)同じなので、この際、その辺は無視して、えいやっと同じ変換処理を掛けてしまうことにしてみます。
CODE 2
function custom_gettext( $translated, $text, $domain ) { $custom_translates = array( 'default' => array( '投稿' => '最新情報', '投稿編集' => '最新情報編集', '投稿一覧' => '最新情報一覧', '投稿を検索' => '最新情報を検索', '投稿を表示' => '最新情報を表示', '投稿は見つかりませんでした。' => '最新情報は見つかりませんでした。', 'ゴミ箱内に投稿が見つかりませんでした。' => 'ゴミ箱内に最新情報は見つかりませんでした。', '投稿を更新しました。<a href="%s">投稿を表示する</a>' => '最新情報を更新しました。<a href="%s">最新情報を表示する</a>', 'この投稿を先頭に固定表示' => 'この最新情報を先頭に固定表示' ) ); if ( isset( $custom_translates[$domain][$translated] ) ) { $translated = $custom_translates[$domain][$translated]; } return $translated; } add_filter( 'gettext', 'custom_gettext', 10, 3 ); function trans_custom_gettext() { $args = func_get_args(); $translated = $args[0]; $text = $args[1]; $domain = array_pop( $args ); $translated = custom_gettext( $translated, $text, $domain ); return $translated; } add_filter( 'gettext_with_context', 'trans_custom_gettext', 10, 4 ); add_filter( 'ngettext', 'trans_custom_gettext', 10, 5 ); add_filter( 'ngettext_with_context', 'trans_custom_gettext', 10, 6 );
文脈でことなる翻訳にしていると、おかしくなったりする場合もあると思いますが、その辺もサポートするとなると、設定が分かれて管理しにくくなったり、処理もややこしいことになりそうなので、今回はここまでにしておきます。
もっとスマートなやり方があったら教えて下さいね。
この方法すごいです!!
もしよろしければカテゴリーもエリアに変更したいのですが、
どうすればいいか教えて頂けますか??
function.phpでいじっていて、
あと2か所変更できない個所があります。
・投稿一覧画面の絞り込み検索の「カテゴリー指定なし」
・新規投稿画面の投稿するカテゴリー選択個所のタイトル「カテゴリー」
(その下のカテゴリー一覧は変更できています。)
よろしくお願いします!