代码之家  ›  专栏  ›  技术社区  ›  Ben Jones Tim Goetz

如何从QLocale中获取语言的“长”名称?

  •  0
  • Ben Jones Tim Goetz  · 技术社区  · 6 年前

    我创造了一个 QComboBox 列出Qt应用程序中支持的各种语言。为了填充组合框中的项目,我搜索了所有 .qm 可用语言代码的文件。

    QDir dir(TRANSLATION_PATH);
    QStringList file_names = dir.entryList(QStringList("MyApp_*.qm"));
    QStringList language_codes;
    
    for (const QString& file_name : file_names) {
        QString code = file_name;             // "MyApp_de.qm"
        code.truncate(code.lastIndexOf('.')); // "MyApp_de"
        code.remove(0, code.indexOf('_') + 1);// "de"
        language_codes.push_back(code);
    }
    

    然后通过构造一个 QLocale

    for (const QString& language_code : language_codes) {
        QString lang = QLocale::languageToString(QLocale(language_code).language());
        _ui->cboLanguage->addItem(lang, language_code);
    }
    

    问题是我有同名的语言 zh_CN zh_TW 以中国人的身份出现 en_US en_UK

    我的问题是: 有没有一个简单的,非脆性的方法来获得这些语言的“长”的名字?例如,如果它存在的话,我想要如下所示:

    QString ui_text = QLocale(language_code).longLanguageName();
    
    // language_code   ->   ui_text
    // =============        =======
    // "zh_CN"              "Chinese (Simplified)"
    // "zh_TW"              "Chinese (Traditional)"
    // "en_US"              "English (U.S.)"
    // "en_UK"              "English (U.K.)"
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   dtech    6 年前

    - _ 根据您使用的格式,如果是,则通过 QLocale::languageToString() QLocale::countryToString() . 否则你只需要语言。

    Chinese (Taiwan) 而不是 Chinese (Traditional) English (United Kingdom) English (U.K.) .

    尽管更常见的做法似乎是用母语写每种语言的名字。

    en_GB ,和 en_UK 将给你美国,至少在Qt。帝国主义挥之不去,我猜;)

    推荐文章