SlideShare a Scribd company logo
1 of 75
Download to read offline
春の大翻訳祭
              WordBench Osaka
                2013/04/13


              Takayuki Miyauchi



13年4月15日月曜日
自己紹介




13年4月15日月曜日
@miya0001




13年4月15日月曜日
以上!
              (宣伝は自粛します。)




13年4月15日月曜日
では、さっそく本題!




13年4月15日月曜日
テーマやプラグインを翻訳しよう!




13年4月15日月曜日
翻訳でよく使用されるツール




13年4月15日月曜日
poedit
          http://sourceforge.jp/projects/sfnet_poedit/




13年4月15日月曜日
Google Translator Toolkit
               http://translate.google.com/toolkit/




13年4月15日月曜日
Gettext
                        黒い画面の人はこれ



              $ msgfmt -o wp-total-hacks-ja.mo 
                wp-total-hacks-ja.po


                   .poを編集後、上記コマンドを実行




13年4月15日月曜日
WordPress i18n Tools
                   プラグイン&テーマ開発者向け
        http://svn.automattic.com/wordpress-i18n/tools/trunk/



   $ php makepot.php wp-plugin /path/to/plugin




                 翻訳メッセージの抽出が超簡単!



13年4月15日月曜日
ポイント!

              ✓ 開発者じゃない人は poedit または Google

              ✓ 複数の人で共有しながら翻訳するならGoogle




13年4月15日月曜日
翻訳の流れ




13年4月15日月曜日
1. テーマやプラグインの中に専用のディレクトリ
                 があります。
                 (デフォルトでは languages)

              2. その中で .po ファイルを作成&翻訳

              3. .po をコンパイルして、.moを作成

              4. 作者さんに、.po と .mo を送る!




13年4月15日月曜日
ポイント!

              ✓ language/ 以下にある .po と .mo が言語フ
                ァイルです!

              ✓ .po は人が編集するためのファイル

              ✓ .mo はWordPressが実際に読むファイル




13年4月15日月曜日
ファイル名の規則




13年4月15日月曜日
‣ テーマは、常に ja.po (ja.mo)

               ‣ プラグインは、example-ja.po (example-ja.mo)



              example の部分はテキストドメインというやつ




13年4月15日月曜日
✓ textdomainわかんねー!
               ‣ languages/ 以下にある .pot のファイル名の部分が
                 テキストドメイン

               ‣ .pot がない場合はつくる必要があります。
                 (ちょっとむずかしい。。。)




13年4月15日月曜日
これは超簡単にサイトが高速化出来ると評判の
                  WP Boosterの言語ファイル




                超簡単にサイトを高速化したい場合は
                   http://ja.wpbooster.net/

13年4月15日月曜日
✓ まれに pot のファイル名が間違ってる場合も
                ある...orz
                (英語圏の人が開発したものは多言語化のテス
                トをしてないことが多い)




13年4月15日月曜日
これは超簡単に電子書籍が作れると評判の
              bookpressクライアントプラグインのソース




                超簡単に電子書籍を作りたい方は
                  http://ja.bookpress.me/

13年4月15日月曜日
✓ 他にも load_textdomain() という関数を探し
                て、その第一引数を見るという手も。




               これは誰でも超簡単にAWS上でWordPressが使えると評判の、
                   Amimotoでも使用されてるプラグインのソース
                        http://ja.megumi-cloud.com/




13年4月15日月曜日
ポイント!


              ✓ テキストドメイン間違えると翻訳結果が適用
                されないから要注意ね!




13年4月15日月曜日
というわけでさっそく翻訳




13年4月15日月曜日
✓ ちなみに今回は .pot があるのを前提にしま
                す。

              ✓ .pot がない場合は、黒い画面(ターミナル)の
                出番になります。。。




13年4月15日月曜日
poeditで翻訳作業




13年4月15日月曜日
ファイルの読み込み




13年4月15日月曜日
.pot を選ぶ!間違えないでね!

13年4月15日月曜日
翻訳作業




13年4月15日月曜日
13年4月15日月曜日
✓ 保存すれば .mo も同時に生成されます。

              ✓ まめに保存しながら確認しましょうね。^^




13年4月15日月曜日
Google Translator Toolkitで
                         翻訳




13年4月15日月曜日
ファイルの読み込み




13年4月15日月曜日
.po ファイルは .potをコピーして、
              ファイル名の .pot を -ja.po に変更する。


13年4月15日月曜日
13年4月15日月曜日
翻訳が完了したら .poをダウンロード


13年4月15日月曜日
✓ これだけでは、.mo が生成されてないので、
                poeditで、 .mo を作りましょう。

              ✓ 漢なら以下のコマンドで。
                $ msgfmt -o hoge-ja.mo hoge-ja.po




13年4月15日月曜日
翻訳の予備知識




13年4月15日月曜日
翻訳にはガイドラインがあるので
               いちおう目を通しましょう。




                      http://bit.ly/wpjatranslate


13年4月15日月曜日
13年4月15日月曜日
✓ お金をください。=> お金を下さい。

              ✓ お金を払って下さい。
                => お金を払ってください。



                 わかりますか?この違い。
              英語力や技術よりも、国語力が重要。




13年4月15日月曜日
✓ Howdy, %s
                => こんにちは、 %s さん !




13年4月15日月曜日
✓ %s とか %d は、プレースホルダーと呼ばれる
                もので、動的に値が変わります。


              printf(__('We deleted %d spam messages.'), $count);




                        %d の部分に $count の値が入る。
                   「%d件のスパムを削除しました。」




13年4月15日月曜日
✓ %1$s とか %1$d は複数のプレースホルダー
                がある場合に使用します。
              printf(__('Your city is %1$s, and your zip code is
              %2$s.'), $city, $zipcode);




                %1$s の部分に $city が、%2$s の部分に $zipcode が入ります。

      「あなたの 郵便番号は %2$s 、都市名は %1$s です。」




13年4月15日月曜日
✓ %s とか %1$s と、%d とか %1$d は、文字
                列か数字の違いです。




13年4月15日月曜日
✓ 一部の翻訳のみ適用されない!?
               ‣ .po に fuzzy って行があると思います。

               ‣ これは他にも同じようなのがあるけど、オッケー?み
                 たいな意味です。

               ‣ fuzzy って書いてある行を1行まるごと削除し
                 て、.moをつくれば翻訳が適用されます。




13年4月15日月曜日
作者さんに送ろう!




13年4月15日月曜日
✓ 作者さんとのコンタクト方法
               ‣ メール、ブログへのコメント、twitter、フォーラムな
                 ど。

               ‣ リアクションがなければ、コンタクト方法を変えて数
                 日様子を見る感じ。




13年4月15日月曜日
✓ 英語のやり取り怖い!
               ‣ 僕のとこにくる翻訳のメールは、ほとんどが1行。

               ‣ Hi, I have translated your ○○ plugin to
                 Japanese. Your plugin is awesome great !
                 Thanks !

               ‣ ぼくが送る時も、だいたいこんな感じです。




13年4月15日月曜日
なおさんは、こんな感じ



                   コンタクト方法がわかんない時は
                     フォーラムで投げる!




13年4月15日月曜日
翻訳の心構え(?)




13年4月15日月曜日
✓ メンテを継続できないかも。。。
               ‣ 僕も放置した経験があります。笑

               ‣ オープンソースなので、あまり目くじらを立てない感
                 じで。^^




13年4月15日月曜日
✓ 作者さん、知らない人だから遠慮しちゃ
                う。。。
               ‣ 仲良くなろうとされても逆に困りますw

               ‣ そんなこと言ってたらオープンソース成り立たないw




13年4月15日月曜日
✓ 翻訳ファイルはGitHubで公開するのがおすすめ!
              ‣ 続きを誰かがやってくれるかも!

              ‣ バージョンアップなどの際にpullリクエストがくるかも!




13年4月15日月曜日
matuboさんが公開してた、テーマの翻訳を修正したのが、
         はじめてGitHubを使ったきっかけ。

13年4月15日月曜日
✓ とにかく気軽な感じで!




13年4月15日月曜日
(上級者・開発者向け)
              .potをつくる!




13年4月15日月曜日
✓ .potをつくるには、phpのソースからメッセー
                ジを抽出する必要があります。




13年4月15日月曜日
(まあまあ簡単な方法)
              poeditを使って抽出する!




13年4月15日月曜日
13年4月15日月曜日
赤いところがミソ!




13年4月15日月曜日
✓ この方法では完全には抽出できないこともあ
                ります。

              ✓ その時は、黒い画面(ターミナル)の登場
                (詳細はいつか誰かがブログに書くかもw)




13年4月15日月曜日
WordPress i18n Tools
                  を使った抽出




13年4月15日月曜日
まず環境を構築


              1. Xcodeをインストール

              2. gettextライブラリを homebrew 等でインス
                 トール

              3. i18n Tools をインストール




13年4月15日月曜日
Xcodeをインストール

              1. App Storeからインストールするだけ!




13年4月15日月曜日
gettextライブラリをインストール

              $ ruby -e "$(curl -fsSL https://
              raw.github.com/mxcl/homebrew/go)"
              $ brew install gettext




13年4月15日月曜日
WordPress i18n Toolsを
                    インストール
        $ cd

        $ mkdir wordpress-i18n-tools

        $ cd wordpress-i18n-tools

        $ svn co http://i18n.svn.wordpress.org/tools/trunk/ .




13年4月15日月曜日
抽出方法
              $ cd wp-content/plugins/example-plugin

              $ cd lnaguages

              $ ~/wordpress-i18n-tools/makepot.php wp-plugin .




                    以上で .pot が生成される(はず)。




13年4月15日月曜日
最後に翻訳を使った裏ワザ




13年4月15日月曜日
✓ せっかく翻訳したのに、作者が適用してくれ
                ねー!

              ✓ アップデートしたら翻訳ファイルが消えたじ
                ゃねーかっ!




13年4月15日月曜日
自作プラグイン等で、.mo のパスを書き換えること
         で、暫定的に日本語を適用できます。

              add_filter(
                 "load_textdomain_mofile",
                 "my_load_textdomain_mofile",
                 10,
                 2
              );

              function my_load_textdomain_mofile($mo, $domain){
                  if ($domain === 'example') {
                      return ‘/path/to/example-ja.mo’;
                  }
                  return $mo;
              }
                                    この方法ならプラグインがアップデー
                                           トされてもオッケー!


13年4月15日月曜日
✓ テーマの翻訳を手っ取り早くするなら、
                twentytwelveなどのデフォルトテーマの
                ja.mo を、そのまま適用しちゃおう。笑



               // 子テーマの functions.php に以下のようなソースを。
               load_theme_textdomain(
                   'ここにテーマのテキストドメイン',
                    dirname(__FILE__).'/languages'
               );




13年4月15日月曜日
✓ いまいち活用しきれてない投稿フォーマット
                もこうすれば!?




13年4月15日月曜日
<?php

    add_filter('gettext', 'change_post_to_article');
    add_filter('gettext_with_context', 'change_post_to_article');
    add_filter('ngettext', 'change_post_to_article');
    add_filter('ngettext_with_context', 'change_post_to_article');

    function change_post_to_article($translated) {
         $translated = str_ireplace('アサイド', 'プレスリリース',
    $translated);
         return $translated;
    }




13年4月15日月曜日
おわり
              あざました!




13年4月15日月曜日

More Related Content

Similar to WordBench Osaka 春の大翻訳祭り

20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
Yuto Ogi
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
SATOSHI TAGOMORI
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
siranon *
 
Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
Keishi Hosoba
 
Herokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトークHerokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトーク
淳 竹野
 
fluent-plugin-resque_stat
fluent-plugin-resque_statfluent-plugin-resque_stat
fluent-plugin-resque_stat
Makoto Haruyama
 

Similar to WordBench Osaka 春の大翻訳祭り (20)

WordPressで電子書籍
WordPressで電子書籍WordPressで電子書籍
WordPressで電子書籍
 
アプリケーションプラットホームとしてのWordPress
アプリケーションプラットホームとしてのWordPressアプリケーションプラットホームとしてのWordPress
アプリケーションプラットホームとしてのWordPress
 
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザインスマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
スマフォ時代に乗り遅れない為のレスポンシブ・ウェブデザイン
 
Wordbeach 2011 hajimeno ippo
Wordbeach 2011 hajimeno ippoWordbeach 2011 hajimeno ippo
Wordbeach 2011 hajimeno ippo
 
ぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよぱろっと、Padrinoやめるってよ
ぱろっと、Padrinoやめるってよ
 
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
プログラマになれないあなたのための言語戦略 (Gunma.web #7 2011/12/17)
 
WCO2012「PHP教室」
WCO2012「PHP教室」WCO2012「PHP教室」
WCO2012「PHP教室」
 
20130310 jaws tokai2013
20130310 jaws tokai201320130310 jaws tokai2013
20130310 jaws tokai2013
 
Should we write such like plugin or not?
Should we write such like plugin or not?Should we write such like plugin or not?
Should we write such like plugin or not?
 
第18回 #TFSUG TFS の今 - TFSをきっかけに始まった自己組織化
第18回 #TFSUG TFS の今 - TFSをきっかけに始まった自己組織化第18回 #TFSUG TFS の今 - TFSをきっかけに始まった自己組織化
第18回 #TFSUG TFS の今 - TFSをきっかけに始まった自己組織化
 
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
 
Hakyllで遊んでみた。
Hakyllで遊んでみた。Hakyllで遊んでみた。
Hakyllで遊んでみた。
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
プログラミング学習のための学習
プログラミング学習のための学習プログラミング学習のための学習
プログラミング学習のための学習
 
Seo対策勉強会
Seo対策勉強会Seo対策勉強会
Seo対策勉強会
 
Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
 
勝手に始めるというプラクティス
勝手に始めるというプラクティス勝手に始めるというプラクティス
勝手に始めるというプラクティス
 
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
【未発表】Backbone.jsとJavaEE7でWebアプリを作ろう!(第1回) 〜GETで一覧編〜
 
Herokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトークHerokumeetup8 growライトニングトーク
Herokumeetup8 growライトニングトーク
 
fluent-plugin-resque_stat
fluent-plugin-resque_statfluent-plugin-resque_stat
fluent-plugin-resque_stat
 

More from Takayuki Miyauchi

VCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environmentVCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environment
Takayuki Miyauchi
 

More from Takayuki Miyauchi (20)

オープンソースによるイノベーションの継続
オープンソースによるイノベーションの継続オープンソースによるイノベーションの継続
オープンソースによるイノベーションの継続
 
I love Automation
I love AutomationI love Automation
I love Automation
 
え?まだMAMPで消耗してんの?
え?まだMAMPで消耗してんの?え?まだMAMPで消耗してんの?
え?まだMAMPで消耗してんの?
 
WordPress on HHVM + Hack
WordPress on HHVM + HackWordPress on HHVM + Hack
WordPress on HHVM + Hack
 
オープンソース & オープンデータ
オープンソース & オープンデータオープンソース & オープンデータ
オープンソース & オープンデータ
 
VCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environmentVCCW - Vagrant based WordPress development environment
VCCW - Vagrant based WordPress development environment
 
WordPress開発の最新事情
WordPress開発の最新事情WordPress開発の最新事情
WordPress開発の最新事情
 
Cybozu Kintone x WordPress
Cybozu Kintone x WordPressCybozu Kintone x WordPress
Cybozu Kintone x WordPress
 
WordPressプラグインを公開しよう!
WordPressプラグインを公開しよう!WordPressプラグインを公開しよう!
WordPressプラグインを公開しよう!
 
WordPress Meetup at HUBBA Thailand
WordPress Meetup at HUBBA ThailandWordPress Meetup at HUBBA Thailand
WordPress Meetup at HUBBA Thailand
 
JAWS-UG Kansai 特別編 AWSがあるとき。ないとき。
JAWS-UG Kansai 特別編 AWSがあるとき。ないとき。JAWS-UG Kansai 特別編 AWSがあるとき。ないとき。
JAWS-UG Kansai 特別編 AWSがあるとき。ないとき。
 
初心者向けWordPress DB & Performance
初心者向けWordPress DB & Performance初心者向けWordPress DB & Performance
初心者向けWordPress DB & Performance
 
AWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリAWS+WordPressでつくるFirefoxアプリ
AWS+WordPressでつくるFirefoxアプリ
 
Ckan + AWS
Ckan + AWSCkan + AWS
Ckan + AWS
 
BookPress開発チームから見た 電子書籍の世界
BookPress開発チームから見た 電子書籍の世界BookPress開発チームから見た 電子書籍の世界
BookPress開発チームから見た 電子書籍の世界
 
信頼性が高くハイパフォーマンスなテーマ開発テクニックでライバルに差をつけろ!
信頼性が高くハイパフォーマンスなテーマ開発テクニックでライバルに差をつけろ!信頼性が高くハイパフォーマンスなテーマ開発テクニックでライバルに差をつけろ!
信頼性が高くハイパフォーマンスなテーマ開発テクニックでライバルに差をつけろ!
 
WP Boosterの裏側
WP Boosterの裏側WP Boosterの裏側
WP Boosterの裏側
 
PHP-Ninjaの裏側
PHP-Ninjaの裏側PHP-Ninjaの裏側
PHP-Ninjaの裏側
 
WordPressのお作法
WordPressのお作法WordPressのお作法
WordPressのお作法
 
WordCamp Tokyo 2011 プラグインを作って世界と交流しようぜ
WordCamp Tokyo 2011 プラグインを作って世界と交流しようぜWordCamp Tokyo 2011 プラグインを作って世界と交流しようぜ
WordCamp Tokyo 2011 プラグインを作って世界と交流しようぜ
 

WordBench Osaka 春の大翻訳祭り