「Qtの設定 - Qt Linguist」の版間の差分
(→翻訳の準備) |
|||
181行目: | 181行目: | ||
// SampleTr_ja.qmファイルが存在して、"Hello world!"の翻訳があれば、翻訳を表示して、無ければ原文が表示される | // SampleTr_ja.qmファイルが存在して、"Hello world!"の翻訳があれば、翻訳を表示して、無ければ原文が表示される | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br> | |||
まず、Qtプロジェクトファイルにおいて、変数<code>TRANSLATIONS</code>に、翻訳するTSファイルを指定する。<br> | |||
以下の例では、1つの翻訳セット(日本語のみ)を指定している。<br> | |||
TRANSLATIONS += SampleTr_ja.ts | |||
<br> | |||
<u>※注意</u><br> | |||
<u>翻訳ファイルは、QMファイルではなくTSファイルであることに注意する。</u><br> | |||
<u>TSファイル形式は、Qtソフトウェアの開発中に使用するために設計されている。</u><br> | |||
<br> | |||
<u>Qtソフトウェアの設計者は、<code>lupdate</code>コマンドを実行して、ソースコードから抽出された文言を含むTSファイルを生成する。</u><br> | |||
<u>翻訳者は、Qt Linguistツールを使用してTSファイルを読み込み、翻訳を追加・編集する。</u><br> | |||
<br> | |||
TSファイルはXML形式あり、直接、電子メールで送信すること、および、バージョン管理システムに配置することも簡単である。<br> | |||
TSファイルを手動で編集する場合、XMLのデフォルトエンコーディングはUTF-8であることに注意する。<br> | |||
<br> | |||
例えば、"ø"のようなLatin1文字コードを入力する場合は、XMLエンティティを使用して、<code>ø</code>と記述する。<br> | |||
これは、Unicode 4.0の全ての文字に対して有効である。<br> | |||
<br> | |||
翻訳が完了した後、<code>lrelease</code>コマンドを実行して、TSファイルをQM(Qt Message)ファイル形式に変換する。<br> | |||
QMファイル形式は、高速なルックアップ性能を実現するために設計されたコンパクトなバイナリ形式である。<br> | |||
<code>lrelease</code>コマンドと<code>lupdate</code>コマンドは、<br> | |||
Qtプロジェクトの全てのソースコードファイルとヘッダファイル(Qtプロジェクトファイルの変数SOURCESと変数HEADERSで指定されているファイル)を読み込み、<br> | |||
<code>tr</code>メソッドの呼び出しに登場する文字列を抽出する。<br> | |||
<br> | |||
<code>lupdate</code>コマンドは、TSファイルを生成および更新して、ソースコードと同期させるために使用する。<br> | |||
<code>lupdate</code>コマンドは情報を削除しないため、どのタイミングで実行してもよい。<br> | |||
例えば、QtプロジェクトファイルやCMakeプロジェクトファイルに記述することにより、プロジェクトをビルド/リビルドするたびにTSファイルが更新される。<br> | |||
また、<code>lupdate</code>コマンドの<code>-verbose</code>オプションは、<code>lupdate</code>コマンド実行時における詳細なメッセージを表示するものである。<br> | |||
lupdate -verbose <Qtプロジェクトファイル> | |||
<br> | |||
<code>lupdate</code>コマンドの実行後、カレントディレクトリにTSファイルが生成される。<br> | |||
TSファイル形式は、Qt Linguistツール等を使用して読み込むため、理解する必要はない。<br> | |||
<syntaxhighlight lang="xml"> | |||
<!DOCTYPE TS><TS> | |||
<context> | |||
<name>QPushButton</name> | |||
<message> | |||
<source>Hello world!</source> | |||
<translation type="unfinished"></translation> | |||
</message> | |||
</context> | |||
</TS> | |||
</syntaxhighlight> | |||
<br> | |||
Qt Linguistツールを使用して、各国の言語を翻訳する。<br> | |||
Qt Linguistツールのパスは、/<Qtのインストールディレクトリ>/bin/linguistに存在する。<br> | |||
端末からQt Linguistを起動する場合は、以下に示すコマンドを実行する。<br> | |||
linguist <TSファイル> | |||
<br> | |||
また、XMLエディタやテキストエディタを使用して、直接、TSファイルを編集することもできる。<br> | |||
<br> | |||
Qt Linguistツールの使用方法を、以下に示す。<br> | |||
# Qt Linguistツールのメイン画面左ペインの上に、翻訳する対象(ここでは、"QPushButton")を選択する。 | |||
# 翻訳する文言(ここでは、"Hello world!")を選択する。 | |||
# Qt Linguistツールのメイン画面中央右にある翻訳ペインに、翻訳した文言を入力する。 | |||
# [完了]チェックボックスにチェックを入力して、メニューバーから[ファイル] - [保存]を選択する。 | |||
# TSファイルを確認する。 | |||
#: <code># 変換前</code> | |||
#: <code><translation type='unfinished'></translation></code> | |||
#: <br> | |||
#: <code># 変換後</code> | |||
#: <code><translation>翻訳した文言</translation></code> | |||
<br> | |||
次に、TSファイルからQMファイルを生成する。<br> | |||
QMファイルの生成は、Qt Linguistツールから(1つずつTSファイルに対して)行う、または、<code>lrelease</code>コマンドを実行して行うことができる。<br> | |||
lrelease <TSファイル 1> <TSファイル 2> <TSファイル ...> | |||
<br> | |||
Qt LinguistツールからQMファイルを生成する方法を、以下に示す。<br> | |||
# Qt Linguistツールのメニューバーから、[ファイル] - [リリース]を選択する。 | |||
# ファイル保存ダイアログの[保存]ボタンを押下する。 | |||
# TSファイルからQMファイルが生成される。 | |||
# Qtソフトウェアを実行して、文言が翻訳されているかどうかを確認する。 | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:Qt]] | [[カテゴリ:Qt]] |
2022年12月1日 (木) 14:14時点における版
概要
リリースマネージャとして、lrelease
とlupdate
の2つのツールが提供されている。
これらのツールは、QtプロジェクトファイルおよびCMakeプロジェクトファイルの処理、または、ファイルシステム上で直接操作することができる。
翻訳ファイルは、ソフトウェアにある全てのユーザー可視テキスト、[Ctrl]キーアクセラレータ、そのテキストの翻訳から構成される。
翻訳ファイルを作成する手順は、以下の通りである。
lupdate
コマンドを実行して、ユーザから見えるテキストを全て含み、翻訳が無い最初の翻訳ファイル群((TSファイル群)を生成する。- TSファイルを翻訳者に渡して、翻訳者はQt Linguistを使用して翻訳を追加する。
Qt Linguistは、変更または削除されたソーステキストを処理する。 lupdate
コマンドは、データを破壊することなく、ソフトウェアのユーザビジュアルテキストと翻訳を同期させる。- ソフトウェアをリリースする場合、
lrelease
を実行して、TSファイルを読み込みソフトウェアで使用するQMファイルを実行時に生成する。
lupdate
コマンドを使用する場合は、コンパイルする翻訳ファイル(TSファイル)を、QtプロジェクトファイルおよびCMakeプロジェクトファイルに記述する必要がある。
lreleaseコマンド
lrelease
コマンドは、TSファイルをQMファイルに変換・生成する。
lrelease <Qtプロジェクトファイルのパス>
QMファイルは、ローカライズされたソフトウェアで使用できるコンパクトなバイナリ形式である。
lrelease
コマンドがコンパイルするTSファイルは、コマンドラインから実行する、または、Qtプロジェクトファイルから間接的に与えることができる。
QMファイルが無い場合、ソフトウェアは設計者が代替として配置したテキストを使用して実行される。
QMファイルを適切な場所に配置することにより、ソフトウェアはQMファイルを自動的に検出して使用する。
また、lrelease
コマンドは、Qtプロジェクトファイルを指定せずに実行することもできる。
lrelease.exe <TSファイル 1> <TSファイル 2> <TSファイル ...>
※注意
lrelease
コマンドは、"finished"とマークされた翻訳のみを取り込む。
それ以外の場合は、代わりに原文が使用される。
その他のオプションを知りたい場合は、lrelease -help
コマンドを実行すること。
lupdateコマンド
lupdate
コマンドは、指定されたソースファイル、ヘッダファイル、Qtデザイナーインターフェイスファイルの中から翻訳可能な文字列を見つけて、
TSファイル(翻訳ファイル)からQMファイルへ生成または更新する。
処理するファイルと更新するファイルは、コマンドラインから実行する、または、Qtプロジェクトファイルで指定する。
lupdate <Qtプロジェクトファイルのパス>
また、1つのQMLファイルに対する翻訳ファイルは、lupdate
コマンドを実行することにより、生成することができる。
lupdate <QMLファイル> -ts <対応するTSファイル> 例. lupdate main.qml -ts main_ja.ts
他の言語(フランス語等)の翻訳ファイルを作成する場合は、main_en.tsファイルをmain_fr.tsファイルとしてコピーして、各言語のTSファイルにある文字列を翻訳・記述する。
lupdate
コマンドは、.qrcファイルに記述されたQMLファイルを処理することもできる。
# Qtプロジェクトファイル (.pro) RESOURCES += qml.qrc
全てのQMLファイルを特定の言語のQMファイルへ生成または更新する。
lupdate application.qrc -ts mysoftware_en.ts
.qrcファイルを使用せずに、全てのQMLファイルを特定の言語のQMLファイルへ生成または更新することも可能である。
lupdate -extensions qml -ts mysoftware_en.ts
QMLファイルおよび翻訳する文字列を含むC++のソースコードも存在する場合も、特定の言語のQMLファイルへ生成または更新することが可能である。
lupdate qml.qrc mainwindow.cpp -ts mysoftware_en.ts
TSファイルは、Qtプロジェクトファイルに記述せずに、lupdate
コマンドを実行して、翻訳ファイルを指定することもできる。
以下の例では、英語とフランス語に使用するTSからQMファイルへ生成または更新している。
lupdate qml.qrc mainwindow.cpp -ts mysoftware_en.ts mysoftware_fr.ts
TSファイルの雛形を翻訳者に渡して、翻訳者はQt Linguistを使用してTSファイルを読み込み、翻訳を記述する。
社内に翻訳者がいる企業は、ソフトウェアの開発に合わせて、定期的にlupdate
コマンドを実行するとよい。
これにより、翻訳作業量は少なくなり、プロジェクトの期間中に均等に分散されて、翻訳者は同時に多くのプロジェクトをサポートできるようになる。
TSファイルは、人間が読めるXML形式であり、必要に応じてバージョン管理システムで管理することができる。
また、lupdate
コマンドは、Localization Interchange File Format(XLIFF)形式のファイルも処理することができる。
※注意
XLIFF形式のファイルの最小サポートバージョンは、1.1である。
XLIFF 1.0以前のファイルはサポートされていないので注意すること。
その他のオプションを知りたい場合は、lupdate -help
コマンドを実行すること。
未完成の翻訳
lrelease
コマンドおよびlupdate
コマンドは、TSファイルの翻訳が不完全な場合でも使用することができる。
その場合、不足している翻訳箇所は、実行時にネイティブ言語のフレーズに置き換えられる。
Qt Linguistのマニュアル : 開発者向け
翻訳におけるオーバーヘッド
Qtでは、各ウィンドウのフレーズを作成時に翻訳することにより、翻訳する時のパフォーマンスコストを最小限に抑えている。
多くのQtソフトウェアでは、ウィンドウおよびダイアログは1度だけ作成されて、必要に応じて表示または非表示にすることがよくある。
最初の翻訳が行われる時、翻訳されたウィンドウのランタイムオーバーヘッドは無い。
ウインドウが破棄されて、その後再作成されるウィンドウのみが、翻訳におけるオーバーヘッドを持つことになる。
実行時に言語を切り替えることができるソフトウェアを設計することもできるが、開発者の介入をある程度必要とするため、実行時のパフォーマンスも犠牲になる。
Qtプロジェクトファイルでの翻訳ファイルの指定
自動的にlrelease
コマンドおよびlupdate
コマンドを使用するには、
Qtプロジェクトファイルにおいて、変数TRANSLATIONS
に対して各言語のエントリーが必要となる。
TRANSLATIONS += mysoftware_en.ts \ mysoftware_ja.ts
lupdate
コマンドは、ソフトウェアからユーザーインターフェイス文字列を抽出する。
これは、Qtプロジェクトファイルを読み込み、どのソースファイルに翻訳されるテキストが含まれているかを特定する。
この時、翻訳するソースコードファイルがQtプロジェクトファイルの変数SOURCES
、変数HEADERS
、変数RESOURCE
に記述している必要がある。
記述されていないファイルのテキストは検出されないため、翻訳対象外となる。
SOURCES += mainwindow.cpp \ main.cpp HEADERS += mainwindow.h \ FORMS += mainwindow.ui TRANSLATIONS += mysoftware_en.ts \ mysoftware_ja.ts
lupdate
コマンドは、全てのソースコードの文字コードがUTF-8で記述されていることを想定している。
特定のBOM(Byte Order Mark)を持つファイルは、UTF-16、UTF-32でエンコードされていることもある。
例えば、BOMの無いソースコードファイルをUTF-16とする場合は、変数CODECFORSRC
をUTF-16
に指定する。
ただし、Visual Studio等のIDEでは、標準で異なる文字コードを使用する。
文字コードの問題を回避する方法として、ソースコードの文字コードをASCIIにして、他の文字を含む翻訳可能な文字列にはエスケープシーケンスを使用する方法がある。
label->setText(tr("F\374r \310lise"));
ソフトウェアの国際化
Qtでは、開発者以外の担当者が、様々な言語や地域に対応できるように、翻訳をできるだけ簡単に行えるようにしている。
Qtの全ての入力コントロールとテキスト描画メソッドは、サポートされている全ての言語に対するビルトインサポートを提供している。
しかし、ソースコードを記述する場合には、以下のことを念頭に置く必要がある。
- ソフトウェアで適切な翻訳ファイルを検索して、読み込むようにする。
- ユーザから見えるテキストと[Ctrl]キーアクセラレータを、翻訳対象としてマークする。
- 翻訳されるテキストに文脈を提供する。
- 同一のテキストの曖昧さを無くす。
- 実行時にテキストまたは数字に置き換えられるパラメータのプレースホルダとして、番号付き引数
%n
を使用する。 - 数値、日付、時間、通貨を国際化する。
- 関数外のデータテキスト文字列を翻訳可能なものにする。
C++/QMLの両方のソースコードにユーザインターフェイスの文字列を持つソフトウェアを設計することができる。
ツールは1つの結合された翻訳ファイルを作成するため、文字列はC++/QMLからアクセス可能である。
Qtソフトウェアの国際化をサポートするクラスは、Internationalization with Qt (Qt5向け)を参照する。
また、ソースコードを翻訳可能にする手順は、Writing Source Code for Translation (Qt5向けi18n)とInternationalization and Localization with Qt Quick (Qt5向け)を参照する。
翻訳が必要な各ソースコードは、翻訳者がそのテキストがソフトウェアのどこに出てくるかを特定するための文脈を必要とする。
また、同じテキストが複数あり、かつ、異なる翻訳が必要な場合、翻訳者はソースコードを曖昧にしないための情報も必要である。
テキストに翻訳マークを付加することにより、自動的にクラス名が基本的なコンテキスト情報として使用される。
場合によっては、設計者が翻訳者の助けになるような情報を追加する必要があるかもしれない。
翻訳の準備
ソフトウェアに必要なQMファイルは、QTranslator
クラスを使用するローダコードが位置する場所に配置する必要がある。
これは、一般的に、QCoreApplication::applicationDirPath
メソッドからの相対パスを指定することで行われる。
ソフトウェアのQMファイルがあり、かつ、システムにインストールされていないバージョンのQtが使用されている場合、QtのQMファイルも配置する必要がある。
Qt5では、QMファイルはモジュールごとに分割されて、全てのモジュールのQMファイルを含むメタカタログファイルが存在する。
しかし、常に、全てのQMファイルをデプロイする必要はない。
lconvert
コマンドを使用して、必要なQMファイルのみをメタカタログファイル名と一致する1つのファイルに連結することを推奨する。
以下の例では、Qt Core、Qt GUI、Qt Quickの各モジュールを使用したQtソフトウェアにおいて、ドイツ語翻訳ファイルを生成している。
lconvert -o installation_folder/qt_de.qm qtbase_de.qm qtdeclarative_de.qm
Qtソフトウェアの翻訳
QTranslatorクラスを使用した翻訳
QTranslator
クラスを使用したQtソフトウェアの翻訳手順を示す。
また、tr
メソッドの最も簡単な使用方法として、ユーザインターフェースのテキストを翻訳用にマークすることも示している。
QObject
クラスを継承する全てのクラスは、tr
メソッドを持つ。
QObject
クラスのメンバ関数の内部では、QPushButton::tr("<文言>")
やQObject::tr("<文言>")
の代わりに、tr("<文言")
と記述すればよい。
#include <QTranslator>
// ...略
QTranslator translator; // QTranslatorクラスのインスタンスを生成する
translator.load("SampleTr_ja"); // ソフトウェアで使用する日本語翻訳ファイル(SampleTr_ja.qmファイル)を読み込む
// もし、日本語翻訳ファイルが無くてもエラーにはならない
app.installTranslator(&translator); // 日本語翻訳ファイルをソフトウェアで使用する翻訳プールに追加する
QPushButton hello(QPushButton::tr("Hello world!")); // "Hello world!"と表示されるボタンを作成する
// SampleTr_ja.qmファイルが存在して、"Hello world!"の翻訳があれば、翻訳を表示して、無ければ原文が表示される
まず、Qtプロジェクトファイルにおいて、変数TRANSLATIONS
に、翻訳するTSファイルを指定する。
以下の例では、1つの翻訳セット(日本語のみ)を指定している。
TRANSLATIONS += SampleTr_ja.ts
※注意
翻訳ファイルは、QMファイルではなくTSファイルであることに注意する。
TSファイル形式は、Qtソフトウェアの開発中に使用するために設計されている。
Qtソフトウェアの設計者は、lupdate
コマンドを実行して、ソースコードから抽出された文言を含むTSファイルを生成する。
翻訳者は、Qt Linguistツールを使用してTSファイルを読み込み、翻訳を追加・編集する。
TSファイルはXML形式あり、直接、電子メールで送信すること、および、バージョン管理システムに配置することも簡単である。
TSファイルを手動で編集する場合、XMLのデフォルトエンコーディングはUTF-8であることに注意する。
例えば、"ø"のようなLatin1文字コードを入力する場合は、XMLエンティティを使用して、ø
と記述する。
これは、Unicode 4.0の全ての文字に対して有効である。
翻訳が完了した後、lrelease
コマンドを実行して、TSファイルをQM(Qt Message)ファイル形式に変換する。
QMファイル形式は、高速なルックアップ性能を実現するために設計されたコンパクトなバイナリ形式である。
lrelease
コマンドとlupdate
コマンドは、
Qtプロジェクトの全てのソースコードファイルとヘッダファイル(Qtプロジェクトファイルの変数SOURCESと変数HEADERSで指定されているファイル)を読み込み、
tr
メソッドの呼び出しに登場する文字列を抽出する。
lupdate
コマンドは、TSファイルを生成および更新して、ソースコードと同期させるために使用する。
lupdate
コマンドは情報を削除しないため、どのタイミングで実行してもよい。
例えば、QtプロジェクトファイルやCMakeプロジェクトファイルに記述することにより、プロジェクトをビルド/リビルドするたびにTSファイルが更新される。
また、lupdate
コマンドの-verbose
オプションは、lupdate
コマンド実行時における詳細なメッセージを表示するものである。
lupdate -verbose <Qtプロジェクトファイル>
lupdate
コマンドの実行後、カレントディレクトリにTSファイルが生成される。
TSファイル形式は、Qt Linguistツール等を使用して読み込むため、理解する必要はない。
<!DOCTYPE TS><TS>
<context>
<name>QPushButton</name>
<message>
<source>Hello world!</source>
<translation type="unfinished"></translation>
</message>
</context>
</TS>
Qt Linguistツールを使用して、各国の言語を翻訳する。
Qt Linguistツールのパスは、/<Qtのインストールディレクトリ>/bin/linguistに存在する。
端末からQt Linguistを起動する場合は、以下に示すコマンドを実行する。
linguist <TSファイル>
また、XMLエディタやテキストエディタを使用して、直接、TSファイルを編集することもできる。
Qt Linguistツールの使用方法を、以下に示す。
- Qt Linguistツールのメイン画面左ペインの上に、翻訳する対象(ここでは、"QPushButton")を選択する。
- 翻訳する文言(ここでは、"Hello world!")を選択する。
- Qt Linguistツールのメイン画面中央右にある翻訳ペインに、翻訳した文言を入力する。
- [完了]チェックボックスにチェックを入力して、メニューバーから[ファイル] - [保存]を選択する。
- TSファイルを確認する。
# 変換前
<translation type='unfinished'></translation>
# 変換後
<translation>翻訳した文言</translation>
次に、TSファイルからQMファイルを生成する。
QMファイルの生成は、Qt Linguistツールから(1つずつTSファイルに対して)行う、または、lrelease
コマンドを実行して行うことができる。
lrelease <TSファイル 1> <TSファイル 2> <TSファイル ...>
Qt LinguistツールからQMファイルを生成する方法を、以下に示す。
- Qt Linguistツールのメニューバーから、[ファイル] - [リリース]を選択する。
- ファイル保存ダイアログの[保存]ボタンを押下する。
- TSファイルからQMファイルが生成される。
- Qtソフトウェアを実行して、文言が翻訳されているかどうかを確認する。