【WordPress】GlotPressを使ってプラグインを翻訳しよう!

こんにちは、しばです。

この間、WordPressの自作プラグインをアップデートしました。
翻訳を何もせずに日本語で作っていたので、今回WordPressのデフォルト言語である英語に修正し、GlotPressを使って改めて日本語へ翻訳しました。

今回は、その過程で知ったWordPress公式プラグインの翻訳方法について、2018/10現在の手順をご紹介します。

GlotPressとは

そもそもGlotPressとはなにか。
GlotPressはWordPress本体や公式ディレクトリにあるテーマやプラグインを、オンラインかつオープンな場所で翻訳できるシステムです。

これを使えば誰でもGlotPress翻訳エンジンを使用して、WordPressの翻訳に関わることができます。

ちなみにWordPress公式ディレクトリに登録していない場合はGlotPressを使えないので注意(その場合はプラグインやテーマのフォルダに翻訳ファイルを梱包する方法になるらしい)

まったく翻訳未対応のプラグインを翻訳するには、

  1. [プラグイン内部] 翻訳箇所を指定する
  2. [WordPress翻訳サイト] GlotPressを使って翻訳テキストを提案する

この2つの作業を行なう必要があります。

順を追って説明していきます。

プラグイン内で翻訳箇所を指定する

プラグインをGlotPressに対応させるための準備をしていきます。

翻訳対象テキストをマークアップする

翻訳したい箇所を__() や_e() を使ってマークアップします。

//プラグインやテーマ内の文字列を翻訳可能にする
$text = __( 'Hello', 'text-domain' );
echo $text;

//echoを含めた書き方。出力結果は上記と同じ
_e( 'Hello', 'text-domain' );

第一引数には表示したい英語テキストを、第二引数の’text-domain’はテキストドメインを入れます。

テキストドメイン(Text Domain)とはプラグイン翻訳に必要な任意の文字列で、これまではメインphpファイルのヘッダー情報に追加する必要がありました。(コードは後述)
しかしWordPress 4.6以降ヘッダー情報のテキストドメインは必須ではなくなりました。未記述の場合、プラグインのスラッグがデフォルトの値になります。

そのため、もしヘッダー情報のテキストドメインを指定しないのなら、’text-domain’部分にはプラグインのスラッグをいれましょう。

プラグインのスラッグは、以下の箇所でわかります。

Google日本語訳)
テキストドメインは、プラグインのスラッグと一致する必要があります。 プラグインがmy-plugin.phpという単一のファイルである場合、またはmy-pluginという名前のフォルダに含まれている場合は、ドメイン名はmy-pluginです。 プラグインがwordpress.orgでホストされている場合は、プラグインURL(wordpress.org/plugins/ <slug>)のスラッグでなければなりません。

引用元)How to Internationalize Your Plugin

私の場合、すでに公式ディレクトリに登録していたので、
https://wordpress.org/plugins/real-time-title-checker/
この”real-time-title-checker”がプラグインのスラッグです。
なので、このようにマークアップしていきました。

$text = __( 'Hello', 'real-time-title-checker' );

現在は不要なもの

少し前のバージョンまで記載する必要があったようですが、今は大体省略可能なようです。一応メモ。

Text Domain

/*
* Plugin Name: My Plugin
* Author: Plugin Author
* Text Domain: my-plugin //ここ
*/

先ほど触れたとおり、WordPress 4.6以降は省略可能です。
未記述の場合、プラグインのスラッグがテキストドメインです。

Domain Path

/*
* Plugin Name: My Plugin
* Author: Plugin Author
* Text Domain: my-plugin
* Domain Path: /languages //これ
*/

翻訳ファイルが入ってるディレクトリのパスを記載するもの。
ガイドには「プラグインが公式のWordPress Plugin Directoryにある場合、省略可能」(日本語訳)とありましたが、初回リリース時でも翻訳をGlotPressで全て行うつもりであれば省略できる気がします(未検証)

テキストドメインの読み込み

function my_plugin_load_plugin_textdomain() {
load_plugin_textdomain( 'my-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'my_plugin_load_plugin_textdomain' );

今はGlotPressの翻訳が優先されるようになっているため、わざわざ書く必要はないとのこと。
ただし、readme.txtのRequires at leastは4.6以上に設定する必要があります。

私の場合、load_plugin_textdomain() は必要!という記事をよく見かけたので、中途半端なことにこれだけいれてみました。今の所、それによる不具合は特にでていません。

マークアップ後、WordPressの開発環境で普通に英語で表示されていればOK!

プラグイン内部の変更は以上です。

GlotPressを使って翻訳テキストを提案する

SVNを使ってこれまでの修正を反映したプラグインをアップロードしたら、WordPress翻訳サイト(translate.wordpress.org)から翻訳作業を開始します。

翻訳テキストを用意

まずは、(1)プラグインの中身 と(2) readme.txt(WordPressのプラグインページの説明等)の翻訳テキストを用意します。

WordPress日本語翻訳ガイドラインに翻訳規則があるので、まずは一読しましょう。

用語集もあり、非常にわかりやすくまとめられています。
翻訳テキストを用意した後、もう一度チェックすると安心ですね。

GlotPress上から翻訳を提案する

翻訳テキストを提案していきます。対象ページまでのアクセス方法や細かな提案手順は、公式の「翻訳の始め方」にありますのでそちらをご参照ください。

さくっと言うと、こういう流れになります。

  1. 翻訳サイトから日本語翻訳ページへアクセス
  2. [プラグイン]タブから自分のプラグインを検索
  3. 自分のプラグインの翻訳ページを開く
  4. プラグイン内部とreadmeそれぞれのテキストの翻訳を提案

全てのテキストの提案を済ませましょう。

全ての翻訳が済むと、untranslatedが0になって全てwaitingになります

ちなみに、前ツイートしたものですが


javaneseという言語もあります。間違えないよう注意しましょう。

GTE権限ユーザーからの承認を待機

GlotPressで提案した翻訳は、GTE・PTEという権限を持つ人たちにチェックしてもらわないと反映されません。
権限の内容はこのようになっています。

翻訳貢献者
(Translation Contributor)
プロジェクトをその言語に翻訳するボランティア。PTE、GTEの検証が必要な「翻訳の提案」を行うことができる。
WprdPressのアカウントを持ってる人は誰でもこの権限がある。
PTE
(Project Translation Editor)
特定の言語、特定のプロジェクトの文字列を検証するためのアクセス権を持つ。翻訳貢献者によって追加された文字列を承認することが可能。
PTEはプロジェクトの開発者または貢献者自身の要請を受け、GTEによって任命される。
GTE
(General Translation Editor)
特定の言語、すべてのプロジェクトで文字列を検証するグローバルアクセス権を持つ。(現在日本語のGTEは6名ほど?)

自分のプラグインだろうと、承認なくして翻訳は反映できません。作ったばかりのプラグインにはPTEはいないので、GTE権限のユーザーにチェックしてもらう必要があります。

waiting状態ならいつかGTEがチェックしてくれるかも知れません。それが待てない場合、Slackからチェック依頼をだすこともできます。

ただ、プラグイン開発者ならアップデートのたびにチェックをお願いするのも大変ですよね。
そうした場合、PTE権限をもらっておくといつでも自由に翻訳を承認することができます。

PTE権限のもらい方はこのWordPress の翻訳/WordPress コア・プラグイン・テーマの翻訳手順にもありますが、私が実際やった方法を記載していきます。

海外・日本のWordPressのSlackへ参加する

PTE権限は日本のWordPressコミュニティのワークスペース「WordSlack」に登録して申請します。
そのWordSlackに参加するには、まずWordPress公式のワークスペース「Making WordPress」に登録しておかないといけません。

WordPress.orgにログインした状態で、海外版→日本版の順でそれぞれ登録していきましょう。

  1. Making WordPress(英語)に登録
  2. WordSlack (日本語)に登録

WordSlackからPTE権限の付与を依頼する

ガイドラインには「PTE権限をもらうには翻訳実績が必要」とありましたが、私は特になんの翻訳実績もなく(プラグイン自体1つ作っただけの状態で)権限をもらうことができました。

PTE権限をもらうにはWordSlackの#requestsチャンネルから依頼します。

文例)こんにちは、ユーザー名:(WordPressのユーザ名)です。
自作のプラグインのPTE権限の付与をお願いできますでしょうか。
https://ja.wordpress.org/plugins/(プラグイン名)/

 

すると、GTEの方々がお手すきの際に権限をつけて返信してくれます。
私の場合、10/2に申請して10/10に権限を付与してもらいました。

また、たまたまかと思いますが、今回はこの権限を付与してくれた方がwaiting状態だった翻訳テキストのチェックまでしてくれました!
これがPTE権限をもらう前にGlotPressの翻訳を行なう方がおすすめだなと思った理由のひとつです。

翻訳がちゃんとガイドに沿っているか自信がないなら、権限付与依頼前に翻訳しておくと、もしかしたらチェックしてくれるかもしれませんね。

翻訳したテキストを「承認」する

PTE権限がもらえたら、GlotPressのStatusに「approve」(承認)ボタンが表示されます。

翻訳が万全なら、あとはテキストごとのapproveボタンをクリック!

PTE権限があると赤枠部分に「approve」ボタンが表示

全てのテキストを承認すると、翻訳ページの進捗状況が100%になります。

Waitingのテキスト数がTranslatedになっていることも確認

ここが100%になるとその言語は翻訳完了となり、プラグインのページもその言語で表示されるようになります。

翻訳の準備ができてないよ!とメッセージが出たら少し待とう

プラグインをアップデートした直後にプラグインの翻訳ページへいくと、以下のメッセージが出ていることがあります。

This plugin is not properly prepared for localization (View detailed logs on Slack). If you would like to translate this plugin, please contact the author.

日本語訳)「このプラグインは、ローカリゼーション用に適切に準備されていません(Slackの詳細ログを表示)。 このプラグインを翻訳したい場合は、著者に連絡してください。」

このメッセージがあると、GlotPressを使って翻訳することができません。

エラーの詳細を見ると、通常テキストドメインに問題がある場合に表示されるとのこと。
また、海外版Slackの#meta-language-packsチャンネルでログが見られるようです。

そこで自分のプラグイン名で検索すると、処理ごとに以下のようなメッセージが流れていました。

(プラグイン名)の翻訳同期
時間:2018年xx月xx日xx時xx分xx秒+ 0000_
翻訳の同期化からプロセス中の安定化へ
同期はできません。
翻訳同期が正常に処理されました。

同期はできない、とありつつ特に具体的なエラーは吐かれていないようです。
翌日を待って改めて翻訳ページを見て見たら、エラーが消えていて問題なく翻訳に入れました。

もし同じ事象に遭った場合は、一晩ほど時間を置いてから確認してみましょう。

簡単にできるからやってみよう!

実際やってみると、翻訳作業そのものとPTE権限を付与してもらうまでに時間がかかるくらいで、簡単に多言語対応できました。

Slackに不慣れだったのでSlackへの登録と申請はちょっと緊張しましたが、#requestsチャンネルには自分の他にもPTE権限付与を依頼している人が多かったので流れに乗ってさくっと申請できました。逆に今は気兼ねなく申請やログ確認ができるので便利なツールだなぁと感じています。

翻訳準備だけならささっとできるので、ぜひチャレンジしてみましょう!