WordPress wp-content/languages/ja.po で翻訳されている日本語を変えたいとき

この記事は約6分で読めます。

あるサイトをつくっていてWordPressのデフォルトで翻訳されている部分を変更したいという要望を受けました。そういった場合の変更方法はXOOPS Cubeだととても簡単だったので気軽に受けたのですが、色々試してみてこれはちょっと…面倒かも?と思いました。
languagesを変更するという方法を試した結果、最終的にはちょっとお手軽的な方法でja.poで翻訳されている日本語を変えてみたのでその経緯について書きます。

スポンサーリンク

ウィジェットで表示している アーカイブ という日本語を変更したい

WordPressをインストールするとデフォルトでウィジェットに「アーカイブ」が表示されます。これは投稿を年月別に表示するというウィジェットなのですが、アーカイブ=年月別の投稿が表示されているということがわかりにくい客層もあると思います。というか私も年月が書いてなければぴんと来ない感じです(^_^;。

そこで「アーカイブ」となっているところを「月別」と変更したい、ということを依頼されました。

まず 「アーカイブ」 はどこで翻訳されているのかを調べてみました。

wp-content\languages\ja.po に、

#: wp-includes/default-widgets.php:272 wp-includes/default-widgets.php:280
#: wp-includes/general-template.php:1195
#: wp-includes/theme-compat/sidebar.php:57
msgid "Archives"
msgstr "アーカイブ"

このように翻訳指定されています。これを以前やった(「Poeditを使って多言語対応ファイルをカスタマイズする」)ように、編集してmoファイルを作り直せば出来るはずです。

実際にこうやってみて変わるのは分かったのですが、この部分はWordPressの本体部分なのでアップデートがあるたびに上書きの可能性があります。なのでここを修正してもアップデートをすると元に戻る可能性があります。

ということでこの方法ではない別の方法を検討してみました。

子テーマのlanguagesの指定

WordPress Codex 日本語版 子テーマ

を見て、子テーマでlanguageを使う方法を調べました。

子テーマにlanguagesというフォルダを作って、 ja.po というファイルを置きます。

ja.poは

msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Last-Translator: umoto <umoto@ryus.co.jp>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 1.5.7\n"

#: wp-includes/default-widgets.php:272 wp-includes/default-widgets.php:280
#: wp-includes/general-template.php:1195
#: wp-includes/theme-compat/sidebar.php:57
msgid "Archives"
msgstr "月別"

このように記述して保存。さらに子テーマのfunctions.phpに

<?php
/**
 * 子テーマのテキストドメインのセットアップ
 *
 * 子テーマのテキストドメインの宣言
 * 翻訳は /languages/ ディレクトリに置く
 */
function my_child_theme_setup() {
    load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'my_child_theme_setup' );
?>

このように記述します。任意に付ける名称 my-child-theme という部分がこの言語ファイルのIDのようなものになります。

子テーマ内で使っているテンプレートに、

<?php echo _e( 'Archives', 'my-child-theme' ); ?>

このように書けば指定した部分には 月別 と表示されます。しかし、今回修正したいウィジェットの部分はテーマで表示しているところではないため、このように子テーマのlanguagesを参照するように書く事ができません(>_<)。

この方法がわかって、今後のためには役立ちそうですが(子テーマではimportを使わない方法が推奨されてるということも知りました(^_^;)、今回やりたいことには使えそうにありませんでした。

表記さえ変わればいい、ということで割り切ってjQueryで書き換えました

と、ここまで色々考えたり試してみた結果、表記さえ変わればいいなら、jQuery要素の内容を置き換えちゃえばいいのかな?と割り切ってやってみたところ問題なく(?)変えられましたのでその方法を書きます。

子テーマのfunctions.php

function my_scripts() {
    wp_enqueue_script( 'jquery' );
    wp_enqueue_script( 'ryus_custom', get_bloginfo( 'stylesheet_directory') . '/js/ryus_custom.js', array(), false, true );
}
add_action( 'wp_enqueue_scripts', 'my_scripts' );

この記述を追加します。

wp_enqueue_script( ‘jquery’ );

でjQueryを使えるようにしてその後に、子テーマのjsというフォルダにある、ryus_custom.js というファイルを読み込むような指定です。

ryus_custom.js は

jQuery(function($){
    $(document).ready(function(){
        $('.widget-title').each(function(index, element){
            if ($(element).text() == "アーカイブ"){
                $(element).text("月別");
            }
        });
    });
});

こんな内容になっています。 widget-title というclassで色々なウィジェットが表示されているので、 eachでそれぞれの要素を一つずつ見ます。もし、表示されている文字が アーカイブ だったときは 月別と書き換える という処理を記述してあります。

これで実行してみると、

このようにアーカイブとなっていたところが月別に変わりました。

この方法で例えば

メタ情報 も意味がいまひとつ分からないので 管理情報 に変更することも

            if ($(element).text() == "メタ情報"){
                $(element).text("管理情報");
            }

こんなコードを追加すれば、

可能です。

まとめ:結果的にはこんな形になりました

結果的にはこんな形になりましたが、languagesのことをちゃんと考えたのは今回が初めてだったので色々勉強になりました。またjQueryでとりあえず表示を変える方法も複数要素があったときはこんな感じだなぁと自分でもあとでまた使えそうなコードが書けたので満足です(^^)/

兎本美佳

ブログを見た人がそのままできたらいいなと思って、できるだけ丁寧に書いています。blogに書いたようなネタの有償対応のご相談は「ゆうそうと」へいただければと思います(^^)/
無償での対応をご希望の場合は、コメントをいただけましたら可能な場合はコメントを返させていただきます。

ゆうそうとITブログの更新通知が受け取れます!
スポンサー広告

WordPress 全般
スポンサーリンク
ゆうそうとITブログの更新通知が受け取れます!
ゆうそうとITブログ

コメント

トップへ戻る

ゆうそうとについての説明

ゆうそうと とは東京都八王子市を中心として、WordPressによるWEBサイトの作成や、スポットでのIT相談を行ったり、年間契約でのIT顧問をなりわいとして活動しています。

特徴としては30年以上IT業界でプログラムを中心として仕事をしてきたものと、美大出身のデザイナーがワンストップで対応するため、幅広い対応が可能であることです。

IT相談は直接お会いしてのご相談の他、ZOOMによるオンライン相談も可能です。