ネットワーク機能を使ってマルチサイトにして、1つのサイトの言語を「英語」、他を「日本語」に設定した場合等の2ヶ国語化する際のメモ。
目次
翻訳リソースファイル(.poファイル)はテキストエディタ(UTF対応)で作成できるが、文字コード(UTF-8またはUTF-8N?)を指定しても新規作成すると、文字化けしてしまうことがあるので、簡単なのはすでにある po ファイルをコピーして別名で(別の場所に)保存し、それをテキストエディタで開いて編集する。
poEdit:翻訳ファイルを編集できるエディタ(Windows、Mac OS X、Linuxに対応)
「Poedit」は編集のみが可能なので、訳語を追加する場合は、po ファイルをテキストエディタで開き、追加編集して保存し、そのファイルを「Poedit」で開き、保存する。
「Poedit」で保存すると、 mo ファイルを作成し、自動的にファイルの情報を付加および更新してくれる。以下は ja.po の例。
# Translation of MySite in Japanese msgid "" msgstr "" "PO-Revision-Date: 2013-03-22 13:54-0500\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.5.5\n" "Project-Id-Version: 3.5.x\n" "POT-Creation-Date: \n" "Language-Team: \n" #: wp-content/themes/cubic/functions.php :93(出現個所→オプション) msgid "Topics" (翻訳対象) msgstr "トピックス" (翻訳) #: wp-content/themes/cubic/functions.php :95 msgid "Add New Topics" msgstr "新規トピックスの追加" #: wp-content/themes/cubic/functions.php :96 msgid "Edit Topics" msgstr "トピックスの編集"
上記の手順で、ja.mo ファイルを作成し、テーマのディレクトリ(wp-content/themes/テーマ名/)に保存。
functions.php に以下を記述して、moファイルをロードし、カスタム投稿タイプを作成し、カスタム投稿タイプの管理画面で、言語設定により表示を変更する場合の例。
functions.php
//'after_setup_theme' アクションフックを利用してmoファイルをロード add_action('after_setup_theme', 'my_theme_setup'); function my_theme_setup(){ load_theme_textdomain('テーマ名'); } function new_post_type() { //トピックスというカスタム投稿タイプを登録 register_post_type( 'topics', array( 'label' => __('Topics', 'テーマ名'), //ラベルは英語の場合「Topics」、日本語の場合「トピックス」 'labels' => array( 'add_new' => __('Add New Topics', 'テーマ名'), 'edit_item' => __('Edit Topics', 'テーマ名'), ), 'public' => true, ... ) ); } add_action('init', 'new_post_type');
追加情報
第一パラメータの「$domain」については、あまりよくわかっていない。ここでは「テーマ名」としていて実際にそれで機能したが、後日テーマを変更した際に新しいテーマ名を指定すると機能しなくなった。最初に指定した元のテーマ名を指定すると機能する。。。
例:/wp-content/themes/mytheme/ja.mo にMOファイルを配置した場合は以下のいずれかで指定可能
load_theme_textdomain( 'テーマ名', TEMPLATEPATH ); load_theme_textdomain( 'テーマ名', get_template_directory()); load_theme_textdomain( 'テーマ名' );
例:/wp-content/themes/mytheme/languages/ja.moにMOファイルを配置した場合は以下のいずれかで指定可能
load_theme_textdomain( 'テーマ名',get_template_directory().'/language/'); load_theme_textdomain( 'テーマ名', TEMPLATEPATH.'/languages' );
Function Reference/load theme textdomain
第1引数:翻訳するメッセージ
第2引数:load_theme_textdomain()で指定したドメイン(翻訳ファイル(.moファイル)を読み込むディレクトリ?)。ドメインを指定しない場合は WordPress 本体の翻訳ファイルを参照するようになる。
__($message, $domain)
翻訳された$messageをreturnで返す(アンダーバーは2つ)
_e($message, $domain)
翻訳された$messageをechoで返す
以下は、「Hello, XX !」を「XXさん、こんにちは。」に翻訳する場合の例。
<?php echo sprintf(__('Hello, %s !', ''テーマ名'),$username); ?>
以下は、検索キーワードが該当しなかった場合の記述の例。
//ja.po msgid "Your search for \"<span>%s</span>\" did not yield any results." msgstr "「<span>%s</span>」の検索結果が見つかりませんでした。" msgid "Enter your keywords:" msgstr "別のキーワードでお試しください。"
//search.php 抜粋 ・・・ <?php endwhile; ?> <?php else: ?> <?php $search = esc_html(get_search_query()); ?> <h2><?php echo sprintf(__('Your search for "<span>%s</span>" did not yield any results.', 'mysite'),$search ); ?></h2> <p class="keyword"><?php _e('Enter your keywords:', 'mysite'); ?></p> <?php get_search_form(); ?> <?php endif; ?>
「title-en.jpg」と「title-ja.jpg」という2つの画像を用意しておき、画像部分を以下のように記述。
<img src="<?php echo get_template_directory_uri(); ?>/images/title<?php _e('-en','テーマ名') ?>.jpg" alt="<?php _e('Title','テーマ名') ?>" />
ja.poに以下を追記し、.moファイルをPoeditで再度生成してアップ
msgid "-en" msgstr "-ja" msgid "Title" msgstr "タイトル"