【问题标题】:QLocale Get real language nameQLocale 获取真实语言名称
【发布时间】:2019-03-26 16:08:37
【问题描述】:

我有一个类似 fr_fr、fr_be 的语言代码。 我想使用 QLocale 获得法语和比利时,但我找不到如何做到这一点。 我做到了:

QLocale locale("fr_fr"); // or fr_be
QString l = locale.languageToString(locale.language()); //returns French in both cases

【问题讨论】:

  • 法语是一种语言,比利时是一个国家。这是一个非常重要的区别。

标签: qt localization translation qlocale


【解决方案1】:

您正在查询语言名称,在这两种情况下都是法语。也许你想得到这样的国家名称:

QLocale locale("fr_be");
QString l = locale.countryToString(locale.country());

阅读here了解更多信息。

【讨论】:

  • 即使我更喜欢法语和比利时语,它在 fr_fr、fr_be、法国和比利时等情况下也能提供良好的结果。但是对于 ca_es 和 es_es,我都得到了西班牙,但我希望加泰罗尼亚语和西班牙语。
  • @SteveTJS 我明白了。问题是像比利时这样的一些国家有几种官方语言(法语、德语和荷兰语),但它们都不是该地区的“本地语言”。像西班牙这样的其他国家拥有不止一种“母语”语言,例如西班牙,他们同时拥有加泰罗尼亚语和西班牙语。所以,很多时候你不会在一个国家和一种语言之间有一个独特的绑定。我的建议是同时使用 QLocale 类提供的语言名称和国家/地区名称,以解决任何歧义。
【解决方案2】:

QLocale 以母语和英语为您提供国家和语言名称。选择你喜欢的:

#include <QCoreApplication>
#include <QLocale>
#include <QDebug>

void displayNames(QLocale& locale)
{
    qDebug() << locale.nativeLanguageName() << locale.nativeCountryName();
    qDebug() << locale.languageToString(locale.language()) << locale.countryToString(locale.country());
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "ca_ES";
    QLocale cat = QLocale("ca_ES");
    displayNames(cat);

    qDebug() << "es_ES";
    QLocale esp = QLocale("es_ES");
    displayNames(esp);
}

这个程序返回:

ca_ES
"català" "Espanya"
"Catalan" "Spain"
es_ES
"español de España" "España"
"Spanish" "Spain"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多