覚書です。
WordPressの翻訳ファイルの作り方(プラグイン開発)
テキストドメインの設定: プラグインのメインファイルに、テキストドメインを定義します。
phpCopyfunction load_textdomain() {
load_plugin_textdomain('your-plugin-textdomain', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
add_action('plugins_loaded', 'load_textdomain');
翻訳関数の使用: プラグイン内のテキストを翻訳関数で囲みます。
__()
: 翻訳して返す_e()
: 翻訳して出力するesc_html__()
: 翻訳してHTMLエスケープして返すesc_html_e()
: 翻訳してHTMLエスケープして出力する
例:
phpCopyecho __('Hello World', 'your-plugin-textdomain');
_e('Welcome to my plugin', 'your-plugin-textdomain');
setting.phpを翻訳する際は定義します。
define('MYPLUGIN_TEXT_DOMAIN', 'my-plugin');
POTファイルの生成: WP-CLIやPoEditなどのツールを使用して、翻訳テンプレート(POT)ファイルを生成します。 翻訳ファイルの作成: POTファイルを基に、各言語用のPOファイルを作成し翻訳します。 例:日本語の場合は ja.po
MOファイルの生成: POファイルをコンパイルしてMOファイルを生成します。 ファイルの配置: 翻訳ファイルを適切なディレクトリに配置します: /wp-content/plugins/your-plugin/languages/
プラグインヘッダーの更新: プラグインのメインファイルのヘッダーに、テキストドメインを追加します:
phpCopy/*
Plugin Name: Your Plugin Name
...
Text Domain: your-plugin-textdomain
Domain Path: /languages
*/
テスト: 異なる言語設定でプラグインをテストし、翻訳が正しく機能することを確認します。
WP-CLIとPoEditの違い
WP-CLIとPoEditの主な違いと、他の選択肢について説明します:
- WP-CLI:
- コマンドラインインターフェース
- WordPress専用ツール
- 翻訳ファイル生成以外の多くのタスクも実行可能
- 自動化やスクリプト化に適している
- 例:
wp i18n make-pot . languages/my-plugin.pot
- PoEdit:
- グラフィカルユーザーインターフェース(GUI)
- 翻訳作業に特化したソフトウェア
- POTファイルの生成、編集、POファイルの作成が可能
- 翻訳メモリ機能あり
- 非技術者でも使いやすい
- その他の選択肢:
a. Loco Translate:- WordPressプラグイン
- Web上で翻訳作業が可能
- POTファイルの生成、編集、POファイルの作成が可能
- Webベースの翻訳プラットフォーム
- 複数の翻訳者で協力して作業可能
- WordPress.orgの翻訳に使用されている
- GNU gettext ユーティリティ
- コマンドラインツール
xgettext
コマンドでPOTファイルを生成
- Gruntタスクとして実行
- Node.js環境が必要
どちらが良いかは状況によって異なります:
- 開発者向け、自動化重視: WP-CLI
- 翻訳者向け(開発者もOK)、GUI重視: PoEdit
- WordPress管理画面内で作業したい: Loco Translate
- チームでの翻訳作業: GlotPress
個人的にPoEditを選びました。PoEditは使いやすくよい選択だったと思います。他は利用したことないためわかりません。
Poeditの使い方
Poeditのダウンロードとインストール
Poeditの公式サイトにアクセスします。
- お使いのオペレーティングシステム(Windows、Mac、Linux)に適したバージョンをダウンロード。
- 今回は「Windows Download」
- ダウンロードしたインストーラーを実行し、画面の指示に従ってインストール
Poeditの起動:
- インストール完了後、Poeditを起動
Poeditの使い方
新しい翻訳プロジェクトの作成:
- 「ファイル」>「新規」を選択(新規作成はテンプレートの読み込みになるため違う)
- 翻訳したい言語を選択します。(ソースコードは英語で記載して日本語などを選択する)
言語選択は2種類あるため、混乱するかもしれないが機能的な違いはなさそうです。ただし拡張子に違いがあります。
- 「日本語」: ja.po
- 「日本語(日本)」: ja_JP.po
おそらく方言みたいなものに「日本語(日本)」は使うのかな、っと!「日本語」を選択しました。
- プラグインにlanguagesフォルダを作成する。
- ファイル > 保存 でプロジェクトを保存します。ファイル名はそのままでOK。
Poeditの翻訳の初期設定(翻訳が存在しません。何かがおかしいようです。)
まず、ソースコードを読み込む設定をします。
翻訳が存在しません。何かがおかしいようです。
翻訳 > プロパティ
もしくは初期時は「ソースから抽出」
- 翻訳の設定:任意入力
- ソース検索のパス:+ > フォルダーパス > プラグインのパスを指定(ドラック&ドロップでもよい)
- ソース中のキーワード:こちらを指定しないと翻訳するテキストが読み込まれません。関数を指定します。
次の関数を登録します。
- __
- _e
esc_html__()
esc_html_e()
なお半角スペースなどが入っていると正しく認識されないため注意が必要です。
関数を登録すると、読み込みが行われて「翻訳が存在しません。何かがおかしいようです。」がでなくなります。
VsCodeと比較して数が一致しているのかを翻訳前にみます。
Poeditの翻訳作業
1行ずつ選択して
ソーステキスト → 対訳を入れていくだけです。
画面右にDeepLの提案が1つでるため便利です。
ただし、無料版はオンラインの提案は10件までに制限されるようです。
Poedit Proの一括、自動翻訳の使い方
Poedit Proを使うと、次のようなメリットがあります。
- DeepL、Google翻訳、マイクロソフト翻訳に対応
- 一括自動翻訳が可能なよう。
- 個別に提案したとき、さまざまな提案をしてもらえる
値段もお手頃なので検討してもよいでしょう。買い切りプランもあるようですがマイクロソフト翻訳しか利用できないようです…。
PoeditでChatGPTとClaudeで自動翻訳
個人的には最近Claude君とChatGPT君に翻訳作業を任せています。
PoeditはChatGPTとClaudeの自動翻訳には対応していないようです。
でも、画像のスクショを取ります。そして、画像を添付してこれ全部翻訳してと投げればOKです。
Claude君とChatGPT君の詳細ははこちらの記事をみてください。
1つ1つウィンドウに入れていく手間はかかりますが、どのみち1行ずつ確認しなきゃいけないのでちょうどよしとします。
Poeditで翻訳ファイルの保存
POファイルとMOファイルの生成:
- Poeditで翻訳作業を保存すると、自動的に.poファイルと.moファイルが生成されます。
- 通常、これらのファイルは「ja.po」と「ja.mo」という名前になります(日本語の場合)。
保存とアップロード:
- 一般的には、プラグインのルートディレクトリ内に「languages」というフォルダを作成し、その中にファイルを保存します。ローカル環境の場合はこれでOK!
- 必要あれば、アップロードします。
WordPressの言語設定:
言語設定を各々、切り替えてテストします。
- 「設定」> 「一般」 > サイトの言語「English(United States)」 > 「変更を保存」
- 「Settings」> 「General」 > Site Language「日本語」 > 「Save Changes」
- 正しく設定できていると、プラグインの再有効化やキャッシュのクリアなしに反映されます。
Poeditで翻訳ファイルが反映されない
PoeditではなくPHPの問題であることが多そうです。テキストドメインがロードされているか。
function load_textdomain() {
load_plugin_textdomain(XXX_TEXT_DOMAIN, false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
add_action('plugins_loaded', 'load_textdomain');
ファイル名はja.moやja.poだけではうまくいきませんでした。接頭言にプラグインネームをつけた途端、うまくいきました。
- plugin-name-ja.mo
- plugin-name-ja.po
こういうことですかね。
- {plugin-name}-{locale}.po
- {plugin-name}-{locale}.mo
defineで定義しているものを使いました。
define('PN_TEXT_DOMAIN', 'plugin-name');
Poeditで翻訳ファイルが更新時に反映されない
最初はPHPを修正して、Poeditで更新する流れが正規の流れでしょう。
なお、VsCode側で置換した場合は正しく反映されないようなので、一度プロジェクトを開いて保存してあげる必要があります。また、PHPファイルと翻訳が不一致だと当然反映されません。
poファイルを開いて保存することによりmoファイルも更新。
また、VsCode上でpoファイルをみると翻訳が終了しておらず、おかしい場合があります。その場合も反映されないです。
Poeditで翻訳テキストの追加
プラグインのアップデートにより翻訳テキストが増える場合があります。
翻訳 > ソースコードから更新
Poeditでテキストの並べ替え
初期時はファイル順にソートになっています、この順番はVsCodeのファイルごとに上から順番になっているようです。
- 表示 > ファイル順にソート
- 表示 > ソース順にソート
- 表示 > 翻訳順にソート
ただし、ソースコード側を変更した際はコードから更新しないとダメなようです。
翻訳 > ソースコードから更新
Poeditで重複テキストはどうなる?
重複テキストはかぶらないように、自動的に処理されているようです。
コメント