QLocale получает реальное название языка

#qt #localization #translation #qlocale

#qt #локализация #перевод #qlocale

Вопрос:

У меня есть код языка, подобный fr_fr, fr_be. Я хотел бы получить французский и бельгийский языки, используя QLocale, но я не могу найти, как это сделать. Я сделал:

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

Комментарии:

1. Французский — это язык, Бельгия — это страна. Это очень важное различие, которое необходимо провести.

Ответ №1:

Вы запрашиваете название языка, которое в обоих случаях является французским. Может быть, вы хотите получить название страны следующим образом:

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

Прочитайте здесь для получения дополнительной информации.

Комментарии:

1. Это дает хорошие результаты в таких случаях, как fr_fr, fr_be, Франция и Бельгия, даже если я бы предпочел французский и бельгийский. Но с ca_es и es_es я получаю Spain для обоих, но я бы ожидал каталанский и испанский.

2. @SteveTJS Я вижу. Проблема в том, что в некоторых странах, таких как Бельгия, есть несколько официальных языков (французский, немецкий и голландский), но ни один из них не является «родным» для этой области. В других странах, таких как Испания, есть более одного «родного» языка, например, в Испании, где есть как каталанский, так и испанский. Таким образом, во многих случаях у вас не будет уникальной привязки между страной и языком. Я предлагаю использовать как название языка, так и название страны, предоставленные классом QLocale, чтобы устранить любую двусмысленность.

Ответ №2:

QLocale предоставляет вам названия стран и языков, как на родном, так и на английском языках. Выберите то, что вы предпочитаете:

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

void displayNames(QLocaleamp; 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"