12,964
回編集
(ページの作成:「== 概要 == リリースマネージャとして、<code>lrelease</code>と<code>lupdate</code>の2つのツールが提供されている。<br> これらのツールは、QtプロジェクトファイルおよびCMakeプロジェクトファイルの処理、または、ファイルシステム上で直接操作することができる。<br> <br> 翻訳ファイルは、ソフトウェアにある全てのユーザー可視テキスト、[Ctrl]キーアクセラ…」) |
(→未完成の翻訳) |
||
82行目: | 82行目: | ||
<code>lrelease</code>コマンドおよび<code>lupdate</code>コマンドは、TSファイルの翻訳が不完全な場合でも使用することができる。<br> | <code>lrelease</code>コマンドおよび<code>lupdate</code>コマンドは、TSファイルの翻訳が不完全な場合でも使用することができる。<br> | ||
その場合、不足している翻訳箇所は、実行時にネイティブ言語のフレーズに置き換えられる。<br> | その場合、不足している翻訳箇所は、実行時にネイティブ言語のフレーズに置き換えられる。<br> | ||
<br><br> | |||
== Qt Linguistのマニュアル : 開発者向け == | |||
==== 翻訳におけるオーバーヘッド ==== | |||
Qtソフトウェアでは、各ウィンドウのフレーズを作成時に翻訳することにより、翻訳する時のパフォーマンスコストを最小限に抑えている。<br> | |||
多くのソフトウェアでは、ウィンドウおよびダイアログは1度だけ作成されて、必要に応じて表示または非表示にすることがよくある。<br> | |||
<br> | |||
最初の翻訳が行われる時、翻訳されたウィンドウのランタイムオーバーヘッドは無い。<br> | |||
ウインドウが破棄されて、その後再作成されるウィンドウのみが、翻訳におけるオーバーヘッドを持つことになる。<br> | |||
<br> | |||
実行時に言語を切り替えることができるソフトウェアを設計することもできるが、開発者の介入をある程度必要とするため、実行時のパフォーマンスも犠牲になる。<br> | |||
<br> | |||
===== Qtプロジェクトファイルでの翻訳ファイルの指定 ==== | |||
自動的に<code>lrelease</code>コマンドおよび<code>lupdate</code>コマンドを使用するには、<br> | |||
Qtプロジェクトファイルにおいて、変数<code>TRANSLATIONS</code>に対して各言語のエントリーが必要となる。<br> | |||
TRANSLATIONS += mysoftware_en.ts \ | |||
mysoftware_ja.ts | |||
<br> | |||
<code>lupdate</code>コマンドは、ソフトウェアからユーザーインターフェイス文字列を抽出する。<br> | |||
これは、Qtプロジェクトファイルを読み込み、どのソースファイルに翻訳されるテキストが含まれているかを特定する。<br> | |||
<br> | |||
この時、翻訳するソースコードファイルがQtプロジェクトファイルの変数SOURCES、変数HEADERS、変数RESOURCEに記述している必要がある。<br> | |||
記述されていないファイルのテキストは検出されないため、翻訳対象外となる。<br> | |||
SOURCES += mainwindow.cpp \ | |||
main.cpp | |||
HEADERS += mainwindow.h \ | |||
FORMS += mainwindow.ui | |||
TRANSLATIONS += mysoftware_en.ts \ | |||
mysoftware_ja.ts | |||
<br> | |||
<code>lupdate</code>コマンドは、全てのソースコードの文字コードがUTF-8で記述されていることを想定している。<br> | |||
特定のBOM(Byte Order Mark)を持つファイルは、UTF-16、UTF-32でエンコードされていることもある。<br> | |||
例えば、BOMの無いソースコードファイルをUTF-16とする場合は、変数CODECFORSRCをUTF-16に指定する。<br> | |||
<br> | |||
ただし、Visual Studio等のIDEでは、標準で異なる文字コードを使用する。<br> | |||
文字コードの問題を回避する方法として、ソースコードをASCIIに限定し、他の文字を含む翻訳可能な文字列にはエスケープシーケンスを使用する方法がある。<br> | |||
label->setText(tr("F\374r \310lise")); | |||
<br> | |||
==== ソフトウェアの国際化 ==== | |||
Qtでは、開発者以外の担当者が、様々な言語や地域に対応できるように、翻訳をできるだけ簡単に行えるようにしている。<br> | |||
Qtの全ての入力コントロールとテキスト描画メソッドは、サポートされている全ての言語に対するビルトインサポートを提供している。<br> | |||
<br> | |||
しかし、ソースコードを記述する場合には、以下のことを念頭に置く必要がある。<br> | |||
* ソフトウェアで適切な翻訳ファイルを検索して、読み込むようにする。 | |||
* ユーザから見えるテキストと[Ctrl]キーアクセラレータを、翻訳対象としてマークする。 | |||
* 翻訳されるテキストに文脈を提供する。 | |||
* 同一のテキストの曖昧さを無くす。 | |||
* 実行時にテキストまたは数字に置き換えられるパラメータのプレースホルダとして、番号付き引数<code>%n</code>を使用する。 | |||
* 数値、日付、時間、通貨を国際化する。 | |||
* 関数外のデータテキスト文字列を翻訳可能なものにする。 | |||
<br> | |||
C++/QMLの両方のソースコードにユーザインターフェイスの文字列を持つソフトウェアを設計することができる。<br> | |||
ツールは1つの結合された翻訳ファイルを作成するため、文字列はC++/QMLからアクセス可能である。<br> | |||
<br> | |||
Qtソフトウェアの国際化をサポートするクラスは、Internationalization with Qtを参照する。<br> | |||
また、ソースコードを翻訳可能にするプロセスは、Writing Source Code for TranslationとInternationalization and Localization with Qt Quickを参照する。 | |||
<br> | |||
翻訳が必要な各ソースコードは、翻訳者がそのテキストがソフトウェアのどこに出てくるかを特定するための文脈を必要とする。<br> | |||
また、同じテキストが複数あり、かつ、異なる翻訳が必要な場合、翻訳者はソースコードを曖昧にしないための情報も必要である。<br> | |||
<br> | |||
テキストに翻訳マークを付加することにより、自動的にクラス名が基本的なコンテキスト情報として使用される。<br> | |||
場合によっては、設計者が翻訳者の助けになるような情報を追加する必要があるかもしれない。<br> | |||
<br> | |||
==== 翻訳の準備 ==== | |||
ソフトウェアに必要なQMファイルは、<code>QTranslator</code>クラスを使用するローダコードが位置する場所に配置する必要がある。<br> | |||
これは、通常、<code>QCoreApplication::applicationDirPath</code>メソッドからの相対パスを指定することで行われる。<br> | |||
<br> | |||
ソフトウェアのQMファイルがあり、かつ、システムにインストールされていないバージョンのQtが使用されている場合、QtのQMファイルも配置する必要がある。<br> | |||
<br> | |||
Qt5では、QMファイルはモジュールごとに分割されて、全てのモジュールのQMファイルを含むメタカタログファイルが存在する。<br> | |||
<br> | |||
しかし、常に、Qt5の全てのQMファイルをデプロイする必要はない。<br> | |||
<code>lconvert</code>ツールを使用して、必要なモジュールのQMファイルのみをメタカタログファイル名と一致する1つのファイルに連結することを推奨する。<br> | |||
以下の例では、Qt Core、Qt GUI、Qt Quickの各モジュールを使用したソフトウェアにおいて、ドイツ語翻訳ファイルを作成している。<br> | |||
lconvert -o installation_folder/qt_de.qm qtbase_de.qm qtdeclarative_de.qm | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |