2017-08-30 39 views
1

Qtを使用していくつかの言語の名前をテキストとして表示する必要があるアプリケーションをプログラミングしています。システムロケールをes_ESに設定しました。そうすれば、私はスペイン語でいくつかの言語と国名を取得したいと思います。しかし、私は母国語で、または英語で取得することができます:システムロケール言語で言語/国名を取得する方法

QLocale lsystem = QLocale::system(); 
QLocale lswiss("de_CH"); 
qDebug()<<"system "<<lsystem.name() << lsystem.languageToString(lsystem.language()) << lsystem.nativeLanguageName(); 
qDebug()<<"swiss "<<lswiss.name() << lsystem.languageToString(lswiss.language()) << lswiss.nativeLanguageName(); 

このソースコードは、次のテキストを出力します。

20:17:09.229 [DEBUG]: system "es_ES" "Spanish" "español de España" 
20:17:09.229 [DEBUG]: swiss "de_CH" "German" "Schweizer Hochdeutsch" 

私が期待する何QLocale::languageToString()方法はに名前を返すことができることです私のシステムのロケール言語ですが、そうではありません。私はスペイン語(español、alemán)で名前を取得したいが、私はそれを行う方法を知らない。

Qtの翻訳ユーティリティで各言語名を翻訳することなく、私が望むものを手に入れることはできますか?前もって感謝します。

+2

これはQtでは不可能です。その情報を含むファイルを作成し、そこから読むことをお勧めします。 – eyllanesc

答えて

2

Qtの翻訳システムを使用することができます。さらに、スペイン語だけでなく、多言語アプリケーション用にも用意されています。欠点は、リストを作成して翻訳しなければならないことです(いくつかの言語であらかじめ作成されたテーブル用にGoogleを使用することがあります)。

QString languageNameInCurrentLocale(const QLocale& loc) { 
    return qApp->translate("locale_name", loc.name().toStdString().c_str()); 
} 

コードに文字列リテラルがないため、翻訳システムに手動で追加する必要があります。あなたはQT_TRANSLATE_NOOPを使ってそれを行うことができます。

初期リストは、すべてのロケール(たとえばthis answerに示すように)を反復処理し、そのような情報(この例では出力をC++ファイルにリダイレクトする)を出力するプリコンパイルステップで生成することができます。ファイルをプロジェクトに追加し、翻訳ファイルを更新します。

void printLocaleList() { 
    const auto allLocales = QLocale::matchingLocales(QLocale::AnyLanguage, 
    QLocale::AnyScript, QLocale::AnyCountry); 

    for (auto loc : allLocales) { 
    std::cout << "QT_TRANSLATE_NOOP(\"locale_name\", \"" << 
       loc.name().toStdString() << "\");\n"; 
    } 
} 
+0

アイデアをありがとう、@cbuchart。 –

+0

あなたを助けてうれしい! – cbuchart

関連する問題