Late 2015 版、WordPress プラグインの翻訳の仕方

この記事はWordPress Advent Calendar 2015の19日目のエントリーです。

お作法が変わりました。

投稿日が大幅に遅くなってすみません。ご迷惑おかけしています。このACで最弱であろう@hnle0です。

ホントは忘年会LTの補足でも書いて誤魔化そうとか思ってたんだけどちょっと前にネタを思いついたんでそっちを書こうと思います。1

プラグイン翻訳してますか?

さて、いきなりですがプラグインの翻訳、してますか?

WordPress プラグインの翻訳と言えば少し前まで Poedit とか でやるのが定番だったかと思います。

WordPress 系翻訳に役立つ基本リンク集

しかしここ最近、この事情は一気に大きく変わっています。

GlotPress で翻訳

(2年以内に更新のあるすべての)WordPress.org 公式ディレクトリ掲載テーマは夏頃から GlotPress で翻訳できるようになっていました。

WordPress 公式ディレクトリ登録テーマのオンライン翻訳

その後、順次プラグインも同様に GlotPress で翻訳できるようになっていきましたが今月、WCUS辺りのタイミングですべてのプラグインが GlotPress での翻訳の対象となりました。(GlotPress へ登録されていないプラグインは次のコミット時に登録されます)

なお、翻訳可能文字列の追加や GlotPress への追加は svn へのコミット時にスクリプトが走るようになっています。稀にGlotPress サーバーが応答しなくて反映されないことがあるので、そのような場合は時間を空けてまたコミットしてやる必要があるようです。(急ぐのであれば。)
なお、このスクリプトのログはMaking WordPress Slack#meta-language-packsチャンネルに出力されるので、気になるならチェックしてみましょう。

プラグインを翻訳しよう

では、ここからはやっとプラグイン翻訳の手順です。ついでにテーマについても書いておきます。これはあくまでも公式ディレクトリに公開しているテーマ・プラグインにおけるものなので、公開しない内製のものや受注のものなどは従来通りの方法を確認してください。

プラグインを翻訳可能にする

このステップは基本的にプラグイン開発者が行わなければいけない領域です。(既に翻訳可能なプラグインについてはスキップして大丈夫です。)

プラグインを翻訳可能にするのには

  • テキストドメインをきめる
  • 翻訳可能文字列を __( 'some text', 'text-domain' ); で…
  • load_plugin_textdomain を…

とかありますが、まぁそんな当たり前の従来通りの話は省略します。

従来との変更点。

pot, po, mo は含める必要がない

GlotPress 上で翻訳する場合、翻訳ソースは自動的にサーバー上で生成されるためpotファイルはなくても構いません。

むしろ、po, moは含めるべきではありません。load_plugin_textdomain の第三引数に与えたディレクトリに該当する言語のmoファイルが存在している場合、GlotPress で翻訳したものよりもこちらが優先されてしまいます。

但し、poがあればGlotPressへの登録時に自動的にインポートされるので、一度登録されてからこれらを消去するようにしましょう。

翻訳ファイルを読み込むようにするのを忘れずに

load_plugin_textdomain を忘れずにプラグインに含めましょう。

プラグイン内にload_plugin_textdomainが見つからない場合、GlotPressにはReadmeのみインポートされ、肝心のプラグイン本体は翻訳できません。

なお、プラグインに言語ファイルを同梱しない場合load_plugin_textdomain の第二引数以降は全て省略可能です。

テキストドメインはスラッグと合わせる必要があります

(追記) textdomain がプラグインスラッグと一致していない場合GlotPressでは翻訳できません。

Plugin Translations on WordPress.org

テーマの場合は?

load_plugin_textdomainの代わりにload_theme_textdomain, load_child_theme_textdomain(子テーマ)を利用すること以外は多分同様。
テーマは既存のものも過去2年以内に更新があれば登録されているはず。

GlotPress で翻訳する

さて、既に長くなりましたが翻訳する人にはここからが本題。

GlotPressでプラグインを翻訳しましょう。

各プラグインの翻訳ページへ辿り着く方法はいくつもあるのですが、今回は分かりやすそうなプラグインページから行く手順。

Translate ページへ!

まず、WordPress.org プラグインディレクトリで翻訳したいプラグインの頁を開き、右下の方にある[プラグインを翻訳] (英語版ページだと [translate (pluginName)])をクリック。

プラグインディレクトリ

GlotPress での翻訳に未対応のプラグインの場合このような画面になります。更新により翻訳可能になるのでどうしてもって場合は作者にPingする必要があります。

cannotranslate

翻訳可能な場合、各言語の翻訳ステータスが一覧で表示されます。

statuslisttranslateworgcf7

stableにあるのが現在リリースされているもの、developmentはtrunkにあるもの、となっていますが、多くのプラグインではこれらが同じになっている気がします。片方 翻訳が承認されれば両方に反映されますがwaitingだと重複してしまうので、できればStableの方優先に翻訳するべきかな…

Suggest! Suggest! Suggest!

GlotPress の使い方についてはさほど説明の必要はないと思うので詳細は割愛。

newsuggest

翻訳テキストをテキストボックスに入力してSuggest。

nowwaiting

waitingになります。

警告があるとAlertが出たりすることもあるので確認しましょう。(日本語と英語でURLが違う、って場合もWarn出ますが合っていたら合っているで無視すればおk)

translationWarning

WordPress から自動DLできるようにするにはcurrentを100%にする必要があるので、一気に訳す際は出来るだけ取りこぼしの無いようにサジェストしておきましょう。

翻訳に際しては、こちらのガイドラインに乗っ取って翻訳をしてください。

プラグイン名や作者名、URL などは状況に合わせてそのまま変更せずに copy from original でサジェストして構いません。

モデレートしてもらう

GlotPress で一般ユーザーが発したサジェストは、モデレーション権限を持つ人にモデレートしてもらう必要があります。

waiting になっているプロジェクト一覧は権限がある人ならば表示できるのですが、なんせモデレート待ちのプロジェクトが多く、またモデレーターが不足しているため、いつまでたっても見てもらえない、publish できない、といったことになります。

日本語の翻訳に関して急いでいる場合は WordSlack の #translate チャンネルでそのことを伝えてもらえれば、気付いた誰かがチェックしてくれるでしょう。
なお、現在日本語の翻訳モデレート権限をすべてのプロジェクトにて行使できるのはここの General Translation Editors にいる6人です。

(WordSlack への参加方法はこちら)

翻訳モデレーションに際して、問題があったら WordSlack にてping が飛ばされる場合があります。
「次以降注意できるように」、「アルファベットと日本語の間スペースが無いだけでモデレーターの名前になるのはちょっと…」
等といった大切な理由です。

あるいは、自分で

プラグイン・テーマの作者で、自分のを GlotPress で翻訳する場合、今のところデフォルトではモデレーション権限はありません。

作者、あるいは作者に推薦された人などで権限を所望する場合、同様に Slack などで、あるいは(naoさんとかに)直接会った際などに頼めば、(大丈夫と判断されれば)プロジェクト単位で権限を貰えます。

もちろん、自分で翻訳を承認する場合もガイドラインに沿って。

GlotPressでの翻訳をテーマ・プラグインに反映させるには

権限を貰うと…

glotpressesable

“Suggest new translation” が “Add translation” になり、”- Reject” の隣に承認ボタン(“+ Approve”)が増えてます。また、一覧にチェックボックスがあるのでそれにチェックを入れ一括Approve, Reject することも可。

ところで、権限があるとSuggestは出来なくなるので、自分の訳に自信が無くて誰かにチェックしてほしい、なんてときにつらい思いをすることがあります。(もちろん一度承認したのも何度でもやり直せるんだけど)

glotpressesableflh

ちなみにWaitingとかで絞り込みやすくもなってます。(一応Filterにはもともとある)

重要:翻訳済みは100%に!

上にも書いたよう、Stable (latest release)に未翻訳項目があると言語ファイルは生成されないので取りこぼしの無いように。

翻訳ファイルが生成される

生成された翻訳ファイルは i18nリポ の /(plugins|themes)/(プラグイン・テーマ名)/(versionNo)/(langName)/(text-dmain)-(langName).po に自動的にコミットされ、またこれが管理画面から自動インストール出来るようになる。

プラグインから翻訳ファイルを消す(消してもらう)

冒頭にも書いたように プラグイン・テーマ内に mo が残っているとそちらが優先されてしまう。

もし残っている場合は、サポートフォーラムなどで作者に連絡してそれを削除してもらわなくてはいけない。

最近いきなりプラグインの翻訳が適用されなくなってすべて英語になってしまったようなプラグインは大体、翻訳が未完で100%になっていないが先に同梱の翻訳が取り除かれたケース。

消して!と伝えてもこの仕組みを理解していないプラグイン作者も多いはずなので

Plugin Translations for All Plugins

をみせつつ、GlotPress の翻訳より同梱の言語ファイルが優先されてしまうので…ってことを伝えないといけないかも。

翻訳は格段としやすくなった

多言語化をサポートする環境はここ最近一気によくなった気がします。

翻訳ファイル集約主義

翻訳ファイルは一箇所に集め一元管理するべき、というコンセプトが今のWPコミュニティにはあります。詳しくは知らないけど、リードデベロッパーのAndrew達が中心になって進めて策定してくれた仕様の一部だそう。

この関連話については先日のCamp KANSAI 2015 で倉石さん(tenpura さん)が話されてたのがWP.tvに上がっているので参考に。

中にはt.w.orgで翻訳しようとすると「うちの独自で設置してるGlotPressで翻訳して!」などとDMを送ってくるプラグイン作者もいました2

今後、翻訳もちゃんと一元化されるようになってほしい…(ひとまず仕組みは整ったのだから。)


さて、WordSlack では最近は tg29359 氏によるサジェストが活発なようです。(もちろんGlotPressで他の人たちのもいろいろとみてますよ!)

Translation editor 不足の問題はありますが…まぁ。

翻訳の始め方


WP-CLI について喋りました

ついでに報告。

本来担当日だった12/19、WordBench Kyoto 忘年会 にて WP-CLI のことちょっと話しました。全然ネタがなかったです。

あと新年早々、京都でBench の番外編イベント、懇親会から始まるWordBashとかいうのがあったりします。まぁ既に定員達してるんですがw 自分は行けるか怪しい…(来いと言われてる)

なんというかスピーカーが豪華…

あれですよね、シェル芸ネタで盛り上がる会ですよね?

ガチな人たちがいっぱいいるこのACに枠を取ってしまい、また投稿が遅くなり(もうクリスマス来ちゃったよ!!)ご迷惑おかけしました。申し訳ない…

さて、こっちの方が本気そうな()「WPACに参加したかった人のためのAC」の19日目は WordPressに関わって – freely0519 でした。

明日?20日目は WordPressを気軽に試せる Cloud9、参加したかった…の方はめがねさんの続 JSON REST API (WP API) プラグインを利用して ブログを API 化したり、そこから情報を取得して表示したり でした。

5000字以上に及んだ殴り書きとなりましたがありがとうございました。


  1. ホントは他にもネタは色々あった気がするんです。書く気力はないけど! 
  2. 後日談としてはそのプラグインもtranslate.w.orgを使うようになりました。なんか一部質のイマイチなwaiting翻訳もついてきましたが…… 

コメントを残す