このページでは

実行時の言語切り替え機能付きローカライズされた時計

この例では、CMakeおよび Qt Quick、特に実行時にアプリケーションの言語を変更する方法について、ベストプラクティスを示しています。これは、より単純な「ローカライズされた時計のサンプル」を拡張したものです。

Qt アプリケーションの翻訳に関する詳細については、『Qt Linguist 』マニュアルを参照してください。

ユーザーインターフェース

このサンプルでは、システムのロケールと言語に基づいて現在の時刻と日付が表示されます。UIのテキストは、英語、ドイツ語、フランス語、スペイン語、イタリア語、日本語、韓国語、ポルトガル語、アラビア語、中国語に対応しています。また、ユーザーはメニューボタンを使用して、さまざまな言語やロケールを選択することもできます。

アプリケーションの英語版:

英語で表示されたデジタル時計のスクリーンショット

実行時に言語を変更した後のドイツ語版:

ドイツ語表示のデジタル時計のスクリーンショット

実装

このアプリケーションは4つの部分で構成されています:

CMakeLists.txt

CMakeとの統合方法は、「Localized Clock」サンプルにおけるCMakeとの統合方法と同じです。詳細については、そのページを参照してください。

main.cpp

アプリケーションの起点となるファイルで、QMLモジュールの読み込みを担当します。

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    QObject::connect(
            &engine, &QQmlApplicationEngine::objectCreationFailed, &app,
            [](const QUrl &) { QCoreApplication::exit(-1); }, Qt::QueuedConnection);
    engine.loadFromModule("qtexamples.localizedclockswitchlocale", "Main");
    return app.exec();
}
翻訳マネージャー (translator.h, translator.cpp)

TranslatorManager は、実行時に言語およびロケールの切り替えを管理するQMLのシングルトンクラスです。このクラスの中心となるメソッドはTranslatorManager::switchLanguage() で、言語コードを表す文字列を受け取ります。

このメソッドはQ_INVOKABLE としてマークされていますが、TranslatorManagerクラスはQML_ELEMENT およびQML_SINGLETONで宣言されています。これにより、QMLからこのメソッドに直接アクセスできるようになります。また、Main.qmlも参照してください。

voidTranslatorManager::switchLanguage(constQString&lang)
{
    QLocale locale(lang);
    QLocale::setDefault(locale);
    qApp->removeTranslator(&m_translator); // not necessary from Qt 6.10
   if(m_translator.load(locale, "clock"_L1, "_"_L1, ":/i18n/"_L1)
       && qApp->installTranslator(&m_translator)) {
        m_engine.retranslate();
    }else{
        qWarning("Could not load translation to %s!", qPrintable(locale.name()));
    }
}
実行時の翻訳の更新

言語を切り替えると、以前の翻訳が削除され(QCoreApplication::removeTranslator())、選択された言語の新しい翻訳が読み込まれ(QTranslator::load())、インストールされます(QCoreApplication::installTranslator())。その後、QQmlEngine::retranslate() によって、QML ドキュメント内の文字列の再翻訳がトリガーされます。

日付および時刻の形式の更新

言語の変更は、日付や時刻の表示方法にも影響を与える可能性があります。たとえば、お使いのシステムでQLocale が「en」に対してロケール「en_US」を、「de」に対して「de_DE」を優先する場合:

  • アプリケーションは、初期状態で国コードとして「US」が設定された状態で読み込まれます。
  • 米国のロケール規則に従い、日付はMM/DD/YYYY形式で表示され、時刻は 12 時間制が使用されます。
  • 言語をドイツ語に変更すると、「de_DE」がドイツ語の第一優先ロケールとなるため、国がドイツに変更されます。
  • ドイツの慣例では、日付はDD.MM.YYYY形式で表示され、24時間制が使用されます。

言語を切り替えると、アプリケーションはQLocale::setDefault() を使用して、選択された言語に応じてQLocale を更新します。時刻を表す際、Date.toLocaleTimeString() 関数が、アプリケーションのロケールに従って時刻と日付のローカライズを行います(Main.qml を参照)。

Main.qml

メインのQMLファイルは、アプリケーションのユーザーインターフェースを定義しています。このUIには、時刻、日付、および秒のカウンターが表示されます。基本的な翻訳(ウィンドウタイトル)および複数形の処理(秒数)については、「Localized Clock」のサンプルを参照してください。

Menu から項目を選択すると、対応する言語コードを指定してTranslatorManager.switchLanguage() が呼び出されます。この呼び出しにより、翻訳可能なテキストの再翻訳も処理されます(「Translator Manager」を参照)。ただし、言語が変更された際に、新しいローカライズ形式で時刻の表示を更新するには、updateClock() を呼び出す必要があります。

        ListModel {
            id: languageModel
            ListElement { name: "English"; code: "en" }
            ListElement { name: "Deutsch"; code: "de" }
            ListElement { name: "العربية"; code: "ar" }
            ListElement { name: "한국어"; code: "ko" }
            ListElement { name: "中文"; code: "zh" }
            ListElement { name: "日本語"; code: "ja" }
            ListElement { name: "Français"; code: "fr" }
            ListElement { name: "Italiano"; code: "it" }
            ListElement { name: "Español"; code: "es" }
            ListElement { name: "Português"; code: "pt" }
        }
        Menu {
            id: languageMenu
            width: languageButton.width
            Repeater {
                model: languageModel
                delegate: MenuItem {
                    required property string name
                    required property string code
                    text: name
                    onTriggered: {
                        TranslatorManager.switchLanguage(code)
                        root.selectedLanguage = name
                        root.updateClock()
                    }
                }
            }
        }

サンプルプロジェクト @ code.qt.io

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.