MythTVの翻訳の方法を簡単に説明します。多分他のqtアプリケーションも似たようなものだと思います。 上から簡単な順番です。 注意:文字コードは全てutf-8を使用してください。
MythTVのソースの取得MythTVのソースを取得します。cvsを使うのでインストールしてください。そして適当なディレクトリで下記のコマンド実行します。 うまくいけばmythtvと言うディレクトリが出来てソース一式が取得できます。 $ cvs -d :pserver:mythtv@cvs.mythtv.org:/var/lib/mythcvs login Logging in to :pserver:mythtv@cvs.mythtv.org:/var/lib/mythcvs CVS password: mythtv $ cvs -z3 -d :pserver:mythtv@cvs.mythtv.org:/var/lib/mythcvs checkout mythtv 取得したソースと最新のソースの変更を反映させるには下記のようにします。 $ cd mythtv $ cvs update -Pd 翻訳するにはucs-muleなどのutf-8をサポートするエディタなら出来ますがlinguistを使うのが良いでしょう。 linguistを使って翻訳するqtの翻訳ファイルを編集するにはlinguistを使うのが簡単です。インストールしましょう $ sudo apt-get install linguist linguistを起動するとこんな画面になります。 mythtv/i18n/mythfrontend_ja.tsを開きます。メニューの File - Openでダイアログが出るのでmythtv/i18n/mythfrontend_ja.tsを選択してください。 “Next Unfinished(Ctrl+L)”で次の未翻訳の部分が表示されます。 右の方の真中に未翻訳の部分が表示されます。“Source text”に元の文章“Translation”に翻訳した言葉を入力します。 翻訳し終わったら“Done and Next(Ctrl+Enter)”をするとこの部分を翻訳済みにして次の未翻訳移動します。 編集し終わったら“Save(Ctrl+S)”で保存します。 翻訳したファイルをインストールする翻訳が終わったらlinguistから File - Releaseを選択するとメッセージファイルの保存先を訪ねてくるのでtsファイルと同じ場所に保存します。
mythfrontend_ja.qmファイルが新しくなります。 $ cd mythtv/i18n $ lrelease mythfrontend_ja.ts このファイルを現在インストールされているファイルと置き換えると翻訳が反映されます。 $ sudo cp mythfrontend_ja.qm /usr/local/share/mythtv 表示が化けるとき翻訳した個所が英語は出ないが????がた時は翻訳はうまく言っているのですが内部でunicodeの取扱がうまくいってないため表示が化けてしまいます。 修正は難しくないのですがメインでMythTVを開発している人たちはunicodeを使わないので確認できない思うので仕方ないと思う。 でも修正のパッチは取り込んでくれるので感謝してます。 興味がある人はソースを見てください。 メニューの翻訳メニューで使用されるファイルがmythtv/programs/mythfrontend/のディレクトリにある xmlファイルにも若干翻訳するところがあります。 文字コードはutf-8ですので注意してください。 例えばmythtv/programs/mythfrontend/mainmenu.xmlの中身を見ると下記のように なっています。 <text>Watch TV</text>がオリジナルの英語のメッセージでそれに対する各国語の
メッセージがlang=??で指定されて以下に続いています。日本語のメッセージを入れるときは
lang="JA"として追加して <type>TV_WATCH_TV</type> <text>Watch TV</text> <text lang="IT">Guarda la TV</text> <text lang="ES">Ver la TV</text> <text lang="CA">Veure la TV</text> <text lang="NL">Kijk TV</text> <text lang="FR">Regarder la TV</text> <text lang="DE">Fernsehen</text> <text lang="DK">Se TV</text> <text lang="PT">Ver TelevisA~£o</text> <text lang="SV">Se pa* TV</text> <text lang="JA">TV放送</text> <text lang="FI">Katso TV:ta"</text> <text lang="ZH_TW">觀看電視</text> <action>TV_WATCH_LIVE</action> ソースの修正対応する翻訳がtsファイルになかったり、表示が????となる場合はおそらくソースを修正しなければなりません。 基本的なことを紹介します。大体これでいけると思いますがあとは感と経験です。 せっかくソースが手に入るので触ってみましょう。分からなくなったら元に戻せばいいだけです。^^) 注意点
参考サイトQtの国際化の方法はKDE-2 アプリの国際化の方法でも解説されているので参考にしてください。 QObject::trtsファイルに目的のメッセージがないときはQString::trが抜けているときがあります。 tsファイルはQObject::trを元に作成するのです。そのときはQObject::trをつけましょう QObject::trをつけるときはそのクラスでQ_OBJECTを宣言していればtrだけでいいですがもしない場合はQObject::trと記述してください この変更をしたあとi18nディレクトリでlupdateを実行するとtsファイルが更新されますlinguistで翻訳して Releaseするかlreleaseを実行してqmファイルをインストールすれば翻訳された文字が表示されます。 例QString msg = "hello"; QString msg2; msg2.sprintf("hello %s", name); // これを次のように直す QString msg = tr("hello"); QString msg2; msg2 = tr("hello %1").arg(name); QString::ascii QString::latin1KDE-2 アプリの国際化の方法 にもあるとおりasciiやlatin1とあるところを見つけます。 それをutf8やlocal8Bitにまたはasciiやlatin1と取り除くかをします。 ただ日付など絶対latin1しかこないところは変更しなくてもいいです。というか変更しないでおきましょうデバッグの手間が増えます。 utf8を使うときはほとんどデータベースのクエリーに使用する時です。 local8Bitを使うときはVERBOSEの中で使用するデバッグメッセージのようにコンソールやログに向けてのメッセージはlocal8Bitを使ってローカルのエンコードにします。Qtが自動的にEUCやUTF-8に変換します。 asciiやlatin1を取るときはその後段でutf8やlocal8Bitを使用するときは取り除きます。 QString::fromUtf8データベースのクエリーの値を受け取るときにUTF-8からUCS-2に変換するためにQString::fromUtf8を使います。 例QSqlQuery query = db->exec("select title from recorded"); QString value = query.value(0).toString(); // 大体こうなっているので下のように直す QString value = QString::fromUtf8(query.value(0).toString()); QString::sprintf今までやってきてQString::sprintfは使わないほうがいいです。うまくいかないことがあります。 日本語でうまくいってもドイツ語のウムラウトがうまく処理できないことがありました。 QString::sprintfを使わなくても10こまでのパラメータならQString::argで代用できます。 10を超えるクエリーを扱うときはQSqlQuery::prepare QSqlQuery::bindValueを使います。 例QString querystr; querystr.sprintf("delete from recorded where title='%s'", title.ascii()); QSqlQuery q; q.exec(querystr); // これを下記のようにする QString querystr; querystr = QString("delete from recorded where title='%1'").arg(title.utf8()); QSqlQuery q; q.exec(querystr); // このやり方だと値が10を超えると対応できないのでそのときはprepare bindValueを使う QSqlQuery q; q.prepare("delete from recorded where title=:TITLE"); q.bindValue(":TITLE", title.utf8()); q.exec(); パッチを作る翻訳が終わったらみんなが使えるようにパッチを作ってmythtv-devのmlに サブジェクトを"[patch][i18n] japanese translation"などとして送れば何か返事をくれると思います。 結構あとで返事がくることも有るのであせらずに待っててください。 あと私に送ってもらってもmlに送ります。 翻訳したパッチを作成するには下記のようにします。 $ cd mythtv $ cvs diff -u > mythtv.patch その他詳しいcvsの使い方は他のサイトを辺を参考にしてください。 |
|