あるサイトをつくっていて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の指定
を見て、子テーマで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でとりあえず表示を変える方法も複数要素があったときはこんな感じだなぁと自分でもあとでまた使えそうなコードが書けたので満足です(^^)/
コメント