From ceb09a144afae488057c1841ec68a2fa0117a3f3 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Fri, 17 Feb 2012 10:11:43 +1000 Subject: Make QLocale::uiLanguages() available in Qt.locale() object Available as uiLanguages property returning an array of strings. Change-Id: Ic698bbaff2eb0f9f6720ae06952c12a987298964 Reviewed-by: Glenn Watson --- src/declarative/qml/qdeclarativelocale.cpp | 25 +++++++++++++ .../qdeclarativelocale/data/properties.qml | 1 + .../qdeclarativelocale/tst_qdeclarativelocale.cpp | 41 ++++++++++++++++++++++ 3 files changed, 67 insertions(+) diff --git a/src/declarative/qml/qdeclarativelocale.cpp b/src/declarative/qml/qdeclarativelocale.cpp index fc6017ce5a..8ec51b058c 100644 --- a/src/declarative/qml/qdeclarativelocale.cpp +++ b/src/declarative/qml/qdeclarativelocale.cpp @@ -556,6 +556,19 @@ static v8::Handle locale_get_weekDays(v8::Local, const v8 return result; } +static v8::Handle locale_get_uiLanguages(v8::Local, const v8::AccessorInfo &info) +{ + GET_LOCALE_DATA_RESOURCE(info.This()); + + QStringList langs = r->locale.uiLanguages(); + v8::Handle result = v8::Array::New(langs.size()); + for (int i = 0; i < langs.size(); ++i) { + result->Set(i, r->engine->toString(langs.at(i))); + } + + return result; +} + static v8::Handle locale_currencySymbol(const v8::Arguments &args) { GET_LOCALE_DATA_RESOURCE(args.This()); @@ -717,6 +730,7 @@ QV8LocaleDataDeletable::QV8LocaleDataDeletable(QV8Engine *engine) ft->PrototypeTemplate()->SetAccessor(v8::String::New("weekDays"), locale_get_weekDays); ft->PrototypeTemplate()->SetAccessor(v8::String::New("measurementSystem"), locale_get_measurementSystem); ft->PrototypeTemplate()->SetAccessor(v8::String::New("textDirection"), locale_get_textDirection); + ft->PrototypeTemplate()->SetAccessor(v8::String::New("uiLanguages"), locale_get_uiLanguages); constructor = qPersistentNew(ft->GetFunction()); } @@ -998,6 +1012,17 @@ v8::Handle QDeclarativeLocale::locale(QV8Engine *v8engine, const QStr \sa firstDayOfWeek */ +/*! + \qmlproperty Array QtQuick2::Locale::uiLanguages + + Returns an ordered list of locale names for translation purposes in + preference order. + + The return value represents locale names that the user expects to see the + UI translation in. + + The first item in the list is the most preferred one. +*/ /*! \qmlproperty enumeration QtQuick2::Locale::textDirection diff --git a/tests/auto/declarative/qdeclarativelocale/data/properties.qml b/tests/auto/declarative/qdeclarativelocale/data/properties.qml index 1d2968b419..16d1f4092a 100644 --- a/tests/auto/declarative/qdeclarativelocale/data/properties.qml +++ b/tests/auto/declarative/qdeclarativelocale/data/properties.qml @@ -23,4 +23,5 @@ QtObject { property var measurementSystem: locale.measurementSystem property var textDirection: locale.textDirection property var weekDays: locale.weekDays + property var uiLanguages: locale.uiLanguages } diff --git a/tests/auto/declarative/qdeclarativelocale/tst_qdeclarativelocale.cpp b/tests/auto/declarative/qdeclarativelocale/tst_qdeclarativelocale.cpp index ab11dbc6da..5afc2354a6 100644 --- a/tests/auto/declarative/qdeclarativelocale/tst_qdeclarativelocale.cpp +++ b/tests/auto/declarative/qdeclarativelocale/tst_qdeclarativelocale.cpp @@ -70,6 +70,8 @@ private slots: void standaloneDayName(); void weekDays_data(); void weekDays(); + void uiLanguages_data(); + void uiLanguages(); void dateFormat_data(); void dateFormat(); void dateTimeFormat_data(); @@ -463,6 +465,45 @@ void tst_qdeclarativelocale::weekDays() delete obj; } +void tst_qdeclarativelocale::uiLanguages_data() +{ + QTest::addColumn("locale"); + + QTest::newRow("en_US") << "en_US"; + QTest::newRow("de_DE") << "de_DE"; + QTest::newRow("ar_SA") << "ar_SA"; + QTest::newRow("hi_IN") << "hi_IN"; + QTest::newRow("zh_CN") << "zh_CN"; + QTest::newRow("th_TH") << "th_TH"; +} + +void tst_qdeclarativelocale::uiLanguages() +{ + QFETCH(QString, locale); + + QDeclarativeComponent c(&engine, testFileUrl("properties.qml")); + + QObject *obj = c.create(); + QVERIFY(obj); + + QMetaObject::invokeMethod(obj, "setLocale", Qt::DirectConnection, + Q_ARG(QVariant, QVariant(locale))); + + QVariant val = obj->property("uiLanguages"); + QVERIFY(val.type() == QVariant::List); + + QList qmlLangs = val.toList(); + QStringList langs = QLocale(locale).uiLanguages(); + + QVERIFY(langs.count() == qmlLangs.count()); + + for (int i = 0; i < langs.count(); ++i) { + QCOMPARE(langs.at(i), qmlLangs.at(i).toString()); + } + + delete obj; +} + void tst_qdeclarativelocale::dateTimeFormat_data() { -- cgit v1.2.3