excitemusic

渡米生活日々の備忘録。
by lily_lila
ICELANDia
S M T W T F S
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
カテゴリ
外部ブログリンク
「渡米生活。(日記)」
もう少し日々のツブヤキに近い内容はこっちに移動しました。
プログラム関係、web関係もそのうちこちらに移します。

「the Gerden of Ethel」
我が家のウサギブログ。
ウサギは、家に連れてきて最初の2週間以内に体調を崩す可能性が高い生き物です。飼う前にご一読を!
ちょっと待って、ウサギを買う前に…
最新のコメント
ブログパーツ
トライアルセット
記事ランキング
検索
ブログジャンル
以前の記事


wordpress導入ログ 〜 多言語化
サイトをwordpress対応にしたので、その備忘録。
以下のようなことがしたい方には、もしかしたら参考になるかもしれません(?)。

1)wordpressでマルチ言語対応のホームページを作りたい。
2)ブログを書くというよりは、データベースや情報伝達がメイン










0)多言語化モジュールを決める。

 wordpressには、残念ながら、まだofficialの多言語化モジュールがない。
 そこで、サードパーティの多言語化モジュールを使うことになるが、このときwordpressのバージョンが多言語化モジュールのサポートバージョンより新しいと動かないことが多いので、先にどのモジュールを使うか決めないと、どのバージョンのwordpressをインストールすべきか決められない。

 有名なところでは、WPMLとqTranslateがある。
 いずれも、自動翻訳ではなく、自分で翻訳記事を書くタイプ。
 (日本語を使う場合、自動翻訳モジュールははっきりいって全く使えない。海外のソフトで自動翻訳モジュールを使って無理矢理日本語対応にしているものがあるが、あまりに訳がひどいので、もとの意味すら類推出来ない。こんな翻訳なら英語のままにしてくれた方がよほど有り難い。逆も似たようなレベルです。)

 どちらも一長一短だが、両方使用した感じでは、私としては、qTranslateの方が扱いやすい。
 以下、それぞれのメリットとデメリット。

 WPML

 メリット: 

  • 記事自体はwordpressに完全に準拠なので、将来WPMLを使うのを止めても問題は起こらない。

  • 翻訳をお願いするリンクがついてくる。試したことはないが、どうやら翻訳をお願いするリンクをクリックして、必要な手続きをすると、記入したページの翻訳を(誰かが)やってくれるらしい。当然有料。このくらいの文章だと○○ドルです、といった案内も出て来る。ただし、どのくらいまともに翻訳してくれるのかは知らない。

  • 自分のテーマのlanguageファイルが普通に使える。(ja.poを変更して、poeditなどでja.moを生成すれば、__()関数などできちんと多言語対応してくれる)


 デメリット:

  • 翻訳記事に、別IDがふられてしまう。つまり、データベース上では、別の記事としてレコードされる。

  • カテゴリーもそれぞれの言語のものを作らなくてはならない。階層の深いカテゴリを作る場合などは、カテゴリの数だけでも膨大になる。3言語以上になったら更に大変。特に、phpの中にカテゴリで分岐するコードなどを書いていると、いつも||で繋いで複数条件を書かないといけないのが面倒。

  • 最新版は無料ではなくなった。過去のものは無料で使えるが、この先無料板のサポートがどうなるか不明。

 
 qTranslate

 メリット: 

  • 翻訳記事と親記事のIDは同じ(同一レコード内に、全ての翻訳が突っ込まれる)。従って、カテゴリも各言語ごとに用意しなくていい。

  • 無料で使える。アップデートもかなり早い。


 デメリット:

  • デフォルト言語の記事と翻訳言語の記事が、同一記事の同一テーブル内に保存される。このため、qTranslateプラグインの使用を止めた途端に、全部の言語が一気に見えてしまう。将来もしwordpressがマルチ言語化に公式対応した場合、qTranslateを使わずに運用するには記事の修正が必要になると思われる。

  • テーマ独自のlanguage fileが使えない(っぽい)。ja.poを編集して、ja.moを作り直して…とやっても、__()関数や__e()関数がまったく働かない。ただし、以下に記述するような方法で、ja.poの代わりをさせることは出来る。個人的には、poeditなどを必要としない分、languageファイルを作るより、この方がシンプルで使いやすいと思う。


私の場合は、カスタムフィールドの値を表にして、フッダとして記事に自動的に書かせる、ということをやらせるのに、翻訳機能が問題になった。__()関数が動かないので、これを上手く多言語化できない。

結局、次のような関数をfunction.phpに書いて、それを呼び出すことで解決した。
これは、あらかじめ決められた文字列を引数に入れると、その文字列をqtranslateが解釈できるように変更した文字列を返す関数。
こうやっておいて、__(my_customfield_for_qtranslate("アーカイブを参照")) とかphpの中で呼び出せば、それぞれの言語に対応した文字列を表示してくれる。

かなりbrute forceだけど、まあ、ウチ程度の規模のホームページならこれで良し。


function hmo_customfield_qtranslate($basetxt) {

// use UTF-8 for encoding
mb_regex_encoding('UTF-8');

// convert castom field values as qtranslate compatible
if (mb_ereg('アーカイブを参照', $basetxt)) return '[:en]See Archives [:ja]アーカイブを参照';
if (mb_ereg('なし', $basetxt)) return '[:en]No Sample [:ja]なし';
if (mb_ereg('お問い合わせ下さい', $basetxt)) return '[:en]Contact Us [:ja]お問い合わせ下さい';
if (mb_ereg('レンタル/販売不可', $basetxt)) return '[:en]Not available from us [:ja]レンタル/販売不可';
if (mb_ereg('レンタル譜', $basetxt)) return '[:en]Rental Score [:ja]レンタル譜';
if (mb_ereg('販売譜', $basetxt)) return '[:en]Sell Score [:ja]販売譜';
if (mb_ereg('納期お問い合わせ下さい', $basetxt)) return '[:en]Contact Us [:ja]納期お問い合わせ下さい';

}


1)wordpress 3.2.1をインストール

 多言語化モジュールが決まったら、そのモジュールがサポートするバージョンのwordpressをとってくる。
 このあたりを参考に。
 ただし、xrea, coreserverを利用の場合の.htaccessのアップロード先は、wordpress本体が入っているディレクトリの中のwp-adminの下(public_html直下ではない)あたりにしておいた方がよいような。
 書式についても、wordpress本家の記述を参考にした方が良い。

 パーマリンク設定を数字ベースに変更。これは、パーマリンクに日本語が混入するのを防ぐため。
 デフォルトでは、こうしておかないと、日本語のタイトルの記事を書くと、スラッグも日本語になり、パーマリンクも日本語になる(記事ごとに手動で変更するのは可能だけど、面倒くさい)。
 最近2バイトのURLも増えてきたが、サイトの国際化を狙うなら、URLはアルファベットのみにしておいた方がまだまだ無難。


2)qtranslateプラグインを導入

もともとWPMLを使っていたが、結局記事管理の煩雑さに匙を投げて、qTranslateに移行した。
(テーマを自作して中で記事やカテゴリごとの分岐なんかをゴリゴリ書かなければ、WPMLでもそんなに苦労はないと思われる)

日本語ではいくつかの問題があるので、設定を変更。
以下の記事を参考にさせていただきました。
qTranslate 導入メモ


3)Custom Field Gui Utility をインストール

MTやらwordpressやらというとブログサイトのイメージが強いが、どちらもデータベースを使っているので、本来のデータベースとしての使い方をすることも出来る。
ただ、そういうことをやろうとすると、ブログ用の表示(投稿日とかコメントとか)が邪魔になる上に、タイトル、本文以外の情報を加えたり、それをフォーマットして見せたり、ということが難しい、という問題もある。

データベースとして使いたいなら、wordpressの方がかなり扱いやすい(と私は思う)。なにしろ、phpさえ知っていればゴリゴリプログラムが書けてしまうわけだし。

勿論MTでも出来るのだろうけど、関数一覧をあさって希望通りの動作をしてくれる関数を探すのに疲れたので、wordpressに移行した。
wordpressなら、関数探すのが面倒なら、function.phpに自分で好きな関数を書けばよい。とてもお手軽。
そもそも、MTとwordpressでは、動かすのに必要なプログラムの数がまったく違う。
MTはライブラリ群が膨大すぎて、とてもじゃないが読む気がしないので、ほとんどブラックボックスで使うしかない。

話がそれたが、データベースに必要なフィールドを足すのに、wordpressにはカスタムフィールドという機能がある。
ただ、デフォルトではあまり使い勝手がよくないようなので、上記プラグインを入れることにした。
こうすれば、データベースのデータとして扱いたいフィールドをあらかじめ定義して、データのフォーマットをそろえることが出来る。
これを書き出す関数は、たとえば以下のように定義しておけばよい。


function hmo_works_meta_print() {

$pdfimagefield = get_imagefield('PDF');
$attachiment = get_attachment_object($pdfimagefield['id']);
$pdfurl = $attachiment['url'];

// print meta table
$custom_fields = get_post_custom();
echo '<p><div id="workscategory-meta-table">';
echo '<table border="1">';
echo __('<tr><td>[:en]Japanese Title[:ja]日本語タイトル (ローマ字)</td><td>' . $custom_fields['jptitle'][0] . '</td></tr>');
echo __('<tr><td>[:en]Westean Title[:ja]欧文名</td><td>' . $custom_fields['westtitle'][0] . '</td></tr>');
echo __('<tr><td>[:en]Publisher[:ja]出版社</td><td>' . $custom_fields['publisher'][0] . '</td></tr>');
echo __('<tr><td>[:en]Original score[:ja]原譜管理</td><td>' . $custom_fields['original'][0] . '</td></tr>');
echo __('<tr><td>[:en]Year[:ja]発表年</td><td>' . $custom_fields['year'][0] . '</td></tr>');
echo __('<tr><td>[:en]Performance time[:ja]演奏時間</td><td>' . $custom_fields['time'][0] . '</td></tr>');
echo __('<tr><td>[:en]Level (1~5)[:ja]難易度 (1~5)</td><td>' . $custom_fields['level'][0] . '</td></tr>');
echo __('<tr><td>[:en]Sound Sample[:ja]サンプル音源</td><td>' . hmo_customfield_qtranslate($custom_fields['sound'][0],'hmo') . '</td></tr>');
echo __('<tr><td>[:en]Store Category[:ja]ストアカテゴリー</td><td>' . hmo_customfield_qtranslate($custom_fields['rental'][0],'hmo') . '</td></tr>');
echo __('<tr><td>[:en]Order Form[:ja]レンタル申込書</td><td><a href="' . $pdfurl . '" target="_blank">PDF</a></td></tr>');
echo '</table></div></p>';
}



これは、カスタムフィールドの値をテーブルにして書き出すための関数で、qTranslateでちゃんとそれぞれの言語を表示してくれる。
先に書いたhmo_customfield_qtranslate関数も使っている。

以下は日本語版のスクリーンショット。

f0064866_8231467.png


こっちは英語版。
f0064866_8233495.png



ところで、exciteブログにソースコードを埋め込むのにてこずって、以下のブログを参考にさせていただきました。
ただ、私の場合、line-height:100%にしないと、文字が重なって読めませんでした。
テーマにもよるのかな。。

(ブログ)Exciteブログにソースコードを貼り付ける
ソースコード HTML化 コンバーター「唐辛子」
[PR]
by lily_lila | 2011-08-06 09:00 | wordpress,web | Comments(0)
<< wordpressでindex... アメリカの小切手(チェック)の... >>