Locales: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
(Add "cleanup" tag)
(Convert ExpressionEngine links)
Line 10: Line 10:
= Basics =
= Basics =


A locale is a set of parameters that define language and other preferences a user may choose for their interface. "Basics of Locales":http://developer.qt.nokia.com/wiki/BasicsOfLocales explains the basics. In Qt, locales are implemented using QLocale and QSystemLocale.
A locale is a set of parameters that define language and other preferences a user may choose for their interface. [http://developer.qt.nokia.com/wiki/BasicsOfLocales Basics of Locales] explains the basics. In Qt, locales are implemented using QLocale and QSystemLocale.


= QSystemLocale =
= QSystemLocale =


QSystemLocale is an interface to query the user's locale information. "QSystemLocale::query()":http://doc.qt.nokia.com/qsystemlocale.html#query can be used to query the locale data including the name of a month, the negative sign for numbers etc.
QSystemLocale is an interface to query the user's locale information. [http://doc.qt.nokia.com/qsystemlocale.html#query QSystemLocale::query()] can be used to query the locale data including the name of a month, the negative sign for numbers etc.


QSystemLocale provides locale information from the Operating System. On Windows, QSystemLocale::query() uses "GetLocaleInfo":http://msdn.microsoft.com/en-us/library/dd318101(v=vs.85).aspx. On the Mac OS X, QSystemLocale::query() uses CFLocaleGetValue. On Linux, query() returns only the measurement system by inspecting the LC_MEASUREMENT, LC_ALL and LANG environment variables (in that order).
QSystemLocale provides locale information from the Operating System. On Windows, QSystemLocale::query() uses [http://msdn.microsoft.com/en-us/library/dd318101(v=vs.85).aspx GetLocaleInfo]. On the Mac OS X, QSystemLocale::query() uses CFLocaleGetValue. On Linux, query() returns only the measurement system by inspecting the LC_MEASUREMENT, LC_ALL and LANG environment variables (in that order).


QSystemLocale::query() can be overridden by an application to provide further customizations to the user's locale.
QSystemLocale::query() can be overridden by an application to provide further customizations to the user's locale.
Line 28: Line 28:
QLocale is the "front-end" class that helps in formatting data based on a locale id. QLocale uses the <language>_<country>.<codeset> format for the locale identifier. A QLocale that is created using no arguments (QLocale()) is equivalent to the default locale. When the default locale is not set, QLocale() is equivalent to the system locale.
QLocale is the "front-end" class that helps in formatting data based on a locale id. QLocale uses the <language>_<country>.<codeset> format for the locale identifier. A QLocale that is created using no arguments (QLocale()) is equivalent to the default locale. When the default locale is not set, QLocale() is equivalent to the system locale.


There are two code paths that QLocale uses to determine the formatting information. The first case is when the default locale (QLocale::setDefault) has not been set and a QLocale object with no constructor arguments is used. In such a case, QLocale() queries all formatting information through QSystemLocale::query(). This results in QLocale formatting data as it has been configured in the Operating System. In the second case, a default locale has been set or a QLocale object is created with a language and country (locale id). In this case, Qt refers to "qlocale_data_p.h":http://qt.gitorious.org/+qt-developers/qt/releases/blobs/0d00798f6bdd098dbb59c6f1da5be5efd6c283fa/src/corelib/tools/qlocale_data_p.h to determine how to format data. qlocale_data_p.h is generated from "CLDR":http://cldr.unicode.org/index/downloads using the cldr2qlocalexml.py and qlocalexml2cpp.py scripts at "local_database":http://qt.gitorious.org/qt/qt/trees/169099b5e9c77c6633deb3c7bb949800a5f80ec2/util/local_database.
There are two code paths that QLocale uses to determine the formatting information. The first case is when the default locale (QLocale::setDefault) has not been set and a QLocale object with no constructor arguments is used. In such a case, QLocale() queries all formatting information through QSystemLocale::query(). This results in QLocale formatting data as it has been configured in the Operating System. In the second case, a default locale has been set or a QLocale object is created with a language and country (locale id). In this case, Qt refers to [http://qt.gitorious.org/+qt-developers/qt/releases/blobs/0d00798f6bdd098dbb59c6f1da5be5efd6c283fa/src/corelib/tools/qlocale_data_p.h qlocale_data_p.h] to determine how to format data. qlocale_data_p.h is generated from [http://cldr.unicode.org/index/downloads CLDR] using the cldr2qlocalexml.py and qlocalexml2cpp.py scripts at [http://qt.gitorious.org/qt/qt/trees/169099b5e9c77c6633deb3c7bb949800a5f80ec2/util/local_database local_database].


To reiterate:
To reiterate:
Line 36: Line 36:
= Fallback locale =
= Fallback locale =


The Fallback locale ("QSystemLocale::fallbackLocale":http://doc.qt.nokia.com/qsystemlocale.html#fallbackLocale) is a QLocale created with the locale id detected using environment variables (LC_ALL and LANG). If the environment variables are not set, GetUserDefaultLCID is used on Windows and CFLocaleGetIdentifier is used on Mac OS X.
The Fallback locale ([http://doc.qt.nokia.com/qsystemlocale.html#fallbackLocale QSystemLocale::fallbackLocale]) is a QLocale created with the locale id detected using environment variables (LC_ALL and LANG). If the environment variables are not set, GetUserDefaultLCID is used on Windows and CFLocaleGetIdentifier is used on Mac OS X.


= Widgets and locales =
= Widgets and locales =


Every widget can be set a locale individually using QWidget::setLocale(). Locales propagate from parent to children. When not set, it is the same as the default locale. Locale settings propagate to children. Qt sends a QEvent::LocaleChange event to a widget when it's locale changes.
Every widget can be set a locale individually using QWidget::setLocale(). Locales propagate from parent to children. When not set, it is the same as the default locale. Locale settings propagate to children. Qt sends a QEvent::LocaleChange event to a widget when it's locale changes.

Revision as of 15:26, 4 March 2015

This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

English Български

[toc align_right="yes" depth="1"]

Written By : Girish Ramakrishnan, ForwardBias Technologies

Basics

A locale is a set of parameters that define language and other preferences a user may choose for their interface. Basics of Locales explains the basics. In Qt, locales are implemented using QLocale and QSystemLocale.

QSystemLocale

QSystemLocale is an interface to query the user's locale information. QSystemLocale::query() can be used to query the locale data including the name of a month, the negative sign for numbers etc.

QSystemLocale provides locale information from the Operating System. On Windows, QSystemLocale::query() uses GetLocaleInfo. On the Mac OS X, QSystemLocale::query() uses CFLocaleGetValue. On Linux, query() returns only the measurement system by inspecting the LC_MEASUREMENT, LC_ALL and LANG environment variables (in that order).

QSystemLocale::query() can be overridden by an application to provide further customizations to the user's locale.

The default locale

Qt programs can be run in any locale by setting the 'default' locale using QLocale::setDefault(). When the default locale is not set, Qt uses the information from QSystemLocale i.e the locale information from the Operating System.

QLocale

QLocale is the "front-end" class that helps in formatting data based on a locale id. QLocale uses the <language>_<country>.<codeset> format for the locale identifier. A QLocale that is created using no arguments (QLocale()) is equivalent to the default locale. When the default locale is not set, QLocale() is equivalent to the system locale.

There are two code paths that QLocale uses to determine the formatting information. The first case is when the default locale (QLocale::setDefault) has not been set and a QLocale object with no constructor arguments is used. In such a case, QLocale() queries all formatting information through QSystemLocale::query(). This results in QLocale formatting data as it has been configured in the Operating System. In the second case, a default locale has been set or a QLocale object is created with a language and country (locale id). In this case, Qt refers to qlocale_data_p.h to determine how to format data. qlocale_data_p.h is generated from CLDR using the cldr2qlocalexml.py and qlocalexml2cpp.py scripts at local_database.

To reiterate:

  • When using the system locale, formatting information is queried from the OS and not CLDR data.
  • When a default locale is set or a QLocale object is created with a locale id, formatting information is obtained from CLDR data.

Fallback locale

The Fallback locale (QSystemLocale::fallbackLocale) is a QLocale created with the locale id detected using environment variables (LC_ALL and LANG). If the environment variables are not set, GetUserDefaultLCID is used on Windows and CFLocaleGetIdentifier is used on Mac OS X.

Widgets and locales

Every widget can be set a locale individually using QWidget::setLocale(). Locales propagate from parent to children. When not set, it is the same as the default locale. Locale settings propagate to children. Qt sends a QEvent::LocaleChange event to a widget when it's locale changes.