進化するQt-Qt最新事情2009

第5回Qt Linguistの進化

はじめに

Qt 4.5では、前回取り上げたQt Designerほどではありませんが、メッセージ翻訳ツールQt Linguistにも久しぶりにいろいろな改善が施されています。

Qt 4.5 What's New in Qt 4.5
URL:http://doc.trolltech.com/4.5/qt4-5-intro.html#qt-linguist-
improvements

Qt 4.5の説明の最後として、上記のページに書かれている内容を元に、補足をしながらQt Linguistの新機能と変更内容を説明します。

ファイルフォーマット関連

翻訳メッセージファイルである.tsファイルのバージョンは、表1のようになっています。Qt 4.5では機能追加に伴って、.tsファイルのXMLフォーマットが拡張され、バージョンも上がっています。また、Qt Linguistで扱えるファイルフォーマットにGNU gettext .poファイルが追加されています。

表1 .tsファイルと、対応するQtのバージョン
.tsバージョン説明
なしQt 4.1以前 ときどきフォーマットに機能追加されている
1.1Qt 4.2~4.4
2.0Qt 4.5
表2 Qt Linguistが新たに扱うXML要素
新XML要素説明
extracomment参考情報としてだけのためのコメントを格納
translatorcomment翻訳者のコメントを格納
extra-*ユーザ拡張
oldsourcelupdateの推測マージで元の値を格納
oldcomment同上

コマンドツール関連

メッセージ翻訳のためのGUIツールQt Linguistを中心とする表3のような翻訳用のツールがあります。

表3 翻訳ツール一覧
ツール説明
Qt Linguist翻訳ファイル(.ts)の翻訳のためのGUIツール
lupdateソースコードから翻訳対象のメッセージテキストを抽出する。
lrelease翻訳ファイルからコンパイル済みQt翻訳バイナリファイル(.qm)を作成する。
lconvertQt 4.5で追加。翻訳に関連するファイルの変換をする。

このQt Linguistツールチェーンのコマンドツールも改良されています。

lconvertコマンド

Qt 4.5で新たに追加されたコマンドラインプログラムlconvertは、翻訳関連のいろいろなファイルのフォーマット変換をするツールです。表4のファイルが扱えます。バイナリの.qmファイルがテキストフォーマットの.tsなどに変換できるようになったのは、内容を確かめるのにとても便利です。

表4 lconvertが扱えるファイル
サフィックス入力出力ファイルフォーマット
qmコンパイル済みQt翻訳バイナリファイル
ts11Qt翻訳ファイル(フォーマット 1.1)
ts20Qt翻訳ファイル(フォーマット 2.0)
tsQt翻訳ファイル(最新フォーマット)
qphQt Linguistフレーズブック(翻訳対応表)
poGNU gettextローカライゼーションファイル
uiQt Designerフォームファイル
juiQt Jambiフォームファイル
cppC++ソースファイル
javaJavaソースファイル
jsQt Scriptソースファイル
xlfXLIFFローカライゼーションファイル

 .juiや.javaはQt Jambiが製品終了となっているため、開発元のサポート対象ではありません。

リファレンスに使い方の説明が何もなく、lconvert -helpで表示されるメッセージのみが使い方の手がかりなのが残念です。この記事の後半で、実際に使ってみた例を説明します。

lupdateコマンド

20近くのバグ修正や改良がされている中からいくつか拾ってみました。

  • //: と /*: */ 形式のコメントが タグに出力されるように

    翻訳者への翻訳のヒントを開発者から伝えるために使われ、Qt Linguistのソーステキスト領域のDeveloper commentsに、開発者が記述したコメントが表示されます。

  • 新しい形式の QT_TR*() マクロやQ_DECLARE_TR_FUNCTIONS への対応QT_TRANSLATE_NOOP_UTF8 マクロの追加。

  • QtScriptへの対応

  • オプション -disable-heuristic、-nosort、-target-language、-source-languageの追加。

    とくに、-disable-heuristic によって、メッセージの変更を推測する機能を無効にできるようになったので、連番でメッセージを扱っている場合に、余計な推測が抑制されます。

  • オプション -locations が追加

    ソースコードの参照行番号を相対番号にしたり、出力しないようにもできるようになりました。

  • UTF-16でエンコーディングされたソースファイルへの対応

  • ネームスペースエイリアスへの対応

  • 同じメッセージの最後のソースコード位置しか記録しなかったのが、全ての位置を記録するようになった

複数言語の同時翻訳

複数言語の翻訳を同時に見比べながらできるようになりました。今までは別々にQt Linguistを起動していたので、並べて比較しながら操作できるようになったのは、翻訳のチェックにもよさそうです。図1は、日本語とフランス語の翻訳ファイルで操作をしているところです。

図1 日本語とフランス語のメニュー見出しを同時に開く
図1 日本語とフランス語のメニュー見出しを同時に開く

複数の翻訳ファイルを閉じて、1つの翻訳ファイルを新たに開いても、翻訳結果を表示するソーステキストの入力欄が複数の翻訳ファイルのままになってしまうという問題がありました。年末にリリース予定の4.6では、この問題が修正されています。

言語設定

翻訳ファイル設定で、翻訳先の言語に加えて、原文の言語の設定ができるようになり、どのように言語を翻訳するかを区別できるようになりました。

翻訳ファイル設定ダイアログ図2は、翻訳先の言語が設定されていない翻訳ファイルを開いたときに表示されます。また、⁠メニューバー⁠⁠→⁠編集⁠⁠→⁠Translation File Settings...」と操作しても表示できます。

図2 翻訳ファイル設定ダイアログ
図2 翻訳ファイル設定ダイアログ

「メニューバー⁠⁠→⁠フレーズ⁠⁠→⁠フレーズブックを編集」と辿ってフレーズブックを選択すると表示されるフレーズブックの編集画面に「Settings...」ボタンが追加され、言語設定ができるようにもなっています。

Qt Linguistのユーザインターフェースの変更

  • 図3のように、Qt Designerのフォーム(.ui)がソースコード表示領域で実際に見られるよう、プレビュー機能が変更されました。Qt 4.4まではQt Designerのフォームの翻訳で、ソースコード表示に.uiのXMLが表示されていましたが、これは、翻訳のための利点はありませんでした。この変更に伴い、今までのプレビューツールが廃止されています(リファレンスにはその記述が残ったままです⁠⁠。

  • 図3 .uiのプレビュー表示
    図3 .uiのプレビュー表示
  • 複数の言語を同時に翻訳できるようになったこともあり、ソーステキスト表示領域に翻訳文が表示されないようになっています。図4はQt 4.4のソーステキスト表示領域で、図5はQt 4.5のものです。

  • 図4 Qt 4.4のソーステキスト表示領域
    図4 Qt 4.4のソーステキスト表示領域
    図5 Qt 4.5のソーステキスト表示領域
    図5 Qt 4.5のソーステキスト表示領域
  • Qt 4.5でツールメニューがなくなりました。リファレンスマニュアルには、ツールメニューの説明が書かれたままになっていますが、Qt 4.5では削除されています。Qt 4.4までは、⁠Batch Translation...」「フォームプレビューを開く/更新する」の2つのメニュー項目がありました。そして、⁠Batch Translation...」は、編集メニューに移動されています。

  • 原文や翻訳文の表示で、空白が「・」⁠中黒)で表示されるようになり、空白を揃えやすくなりました。図6はQt 4.4での表示例で、図7はQt 4.5での表示例です。

  • 図6 Qt 4.4の表示
    図6 Qt 4.4の表示
    図7 Qt 4.5の表示
    図7 Qt 4.5の表示
  • ドラッグ&ドロップでファイルを開けるようになりました。

  • 今までは、翻訳ファイルを「閉じる」ことができませんでした。複数の翻訳ファイルを指定できるようになったためでしょうか、ファイルメニューに「閉じる」「すべて閉じる」メニューが追加されて、間違って編集したときになどに扱いやすくなりました。

Qt Linguist以外の翻訳ツールを試す

XLIFF(XML Localization Interchange File Format)はソフトウェアや文書の国際化、翻訳のためのXML形式フォーマットで、Qt 4.3から部分的なサポートが始まり、Qt 4.5でQt Linguistツールチェーンのすべてのツールで扱えるようになりました。

Qtアプリケーション作成の場合に、必ずQt Linguistを使わなければならないというのでは、いろいろな翻訳作業が発生する場面では、翻訳者が使い慣れた翻訳ツールを使えないので、かえって翻訳者へ負担がかかることもあるでしょう。したがって、XLIFFフォーマットをサポートして、一般的な翻訳支援ツールでもメッセージ翻訳ができるようになったのはよいことです。XLIFFを使って、どのくらいQtに適用できるかを一般的な翻訳ツールで試したいと思い、すぐに入手できるKDEのLokalizeOmegaTで試してみました。

まず、以下のようにlconvertを用いて.tsファイルをXLIFFに変換します。

$ lconvert -i transform_ja.ts -o transform_ja.xlf

LocalizeでこのXLIFFファイルを開くと図8のようになり、問題なく翻訳ができました。

図8 .tsファイルを変換した「transform_ja.xlf」をLocalizeで開いたところ
図8 .tsファイルを変換した「transform_ja.xlf」をLocalizeで開いたところ

XLIFF は以下のようにして、lreleaseでもlconvertでも.qmファイルにできます。

$ lrelease transform_ja.xlf
$ lconvert -i transform_ja.xlf -o transform_ja.qm

OmegaTの方は図9のようになります。ただし、.tsファイルに前処理をしています。翻訳文に原文を入れておかないと、OmegaTでは翻訳対象の原文が認識されないからです。OmegaTで翻訳したXLIFFも.qmに変換して正しく使えました。

図9 OmegaTでの表示
図9 OmegaTでの表示

おわりに

Qt Linguistがまだなかったころには、翻訳メッセージを抽出したファイルを直にエディタで編集していました。そして、開発元から編集用のGUIツール(Qt Linguist)を開発中だが、使って感想を聞かせて欲しいと依頼されてから10年近く経ちました。Qt Linguistは、Qtに特化した翻訳支援ツールなので、Qtアプリケーションを扱う限りでは、一般的な翻訳支援ツールよりは、かなり使いやすいものとなっています。

ただ問題もあります。たとえば、ソースコードで日本語文字列を使うと、Qt Linguistのソースコード表示では文字化けをしてしまいます。文字列のマルチバイトの扱いは、コンパイラによって異なっているので、マルチプラットフォームを考えるならば、ソースコードの文字列に直接マルチバイトを使わずに、ASCIIのみにするのが一番確実です。しかし、場合によっては日本語文字列を使い、それを英語などの他の言語に翻訳する場合もあります。ASCII以外が使え、英語に縛られないようになることも必要でしょう。

さて、今回までは、おもにQt 4.5の新機能について紹介してきました。次回以降は年内にリリースが予定されているQt 4.6を紹介する予定ですが、まだ詳細が不明な部分も多いため、すべての情報が明らかになる4.6リリース後の12月から連載を再開する予定です。楽しみにしてお待ちください。

おすすめ記事

記事・ニュース一覧