Qt5 の日本語化の記事はあるようですが、Qt6 CMake を使っての方法が探してもなかったので書いておきます。
プロジェクト作成時、言語を設定してもそのままでは日本語化できません。
手順は以下の通りです。
- 空の TS ファイルを作る
- CMakeLists.txt を更新する
- CMake を用いて単語を抽出する
- QtLinguist で日本語化する
- アプリ側で QM ファイルを読み込む
空のTSファイルを作る
このファイルはプロジェクト作成時、言語を指定すると自動生成されます。指定していなければ作成します。
ファイル名は任意ですが、 <アプリ名>_ja_JP.ts などするとわかりやすいかもしれません。
空といっても骨格は記述します。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE TS> <TS version="2.1" language="ja_JP"> <context> </context> </TS>
CMakeLists.txt を更新する
以下のコマンドを追加します。
find_package(Qt6 REQUIRED COMPONENTS LinguistTools)
qt6_add_translations(I18n
TS_FILES I18n_ja_JP.ts
QM_FILES_OUTPUT_VARIABLE qm_files)
install(FILES ${qm_files} DESTINATION ${CMAKE_CURRENT_SOURCE_DIR}CMake を用いて単語を抽出する
以下のコマンドをビルドのディレクトリで走らせると単語が抽出されます。
cmake --build . --target update_translations
QtLinguist で日本語化する
QtCreator で TS を右クリックすると Open With メニューから Qt Linguist を起動できます。
コマンドラインからも起動できます。
アプリ側で QM ファイルを読み込む
TS ファイルは QM ファイルへ変換されます。
アプリ側でファイルを読み込むと作業は完成です。標準コンポーネントのため、標準 QM ファイルも読み込みます。
以下のコードではロケールの設定で言語を指定します。
QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "I18n_" + QLocale(locale).name();
if (translator.load(baseName)) {
a.installTranslator(&translator);
break;
}
}
QTranslator stdTranslator;
for (const QString &locale : uiLanguages) {
const QString baseName = "qt_" + QLocale(locale).name();
if (stdTranslator.load(baseName,QLibraryInfo::path(QLibraryInfo::TranslationsPath))) {
a.installTranslator(&stdTranslator);
break;
}
}
上記の方法で作成したプロジェクトです。参考まで。
https://github.com/easai/I18n.git