[Development] QLocale work
Thiago Macieira
thiago.macieira at intel.com
Wed Jan 18 12:35:02 CET 2012
On Wednesday, 18 de January de 2012 00.47.31, John Layt wrote:
> * QString will need a decision on the behaviour of toInt() / toLong() / etc
> using the Default Locale.
They should use the C locale, not the Default (System) locale. Anything in
QtCore, outside of QLocale, should default to the C locale unless otherwise
explicitly requested. To deal with a specific locale, including the system one,
the user needs to use QLocale or use explicit locale-relevant routines.
Higher-level classes, in end user-facing situations, like widgets and QML,
however, should default to the system locale.
We need to avoid the problem of printf / scanf that use different decimal
conventions depending on the user locale. That means the naive implementation
will be unable to parse the data it generated under a different locale
settings.
This is a slightly behaviour-incompatible change, but one I feel is justified:
reading / parsing of data with comma as a decimal separator was already
broken, so we don't break it further; generating of data without thousands
separators and with dots instead of commas for decimals is a minor
inconvenience.
> QLocale has friends which use QLocalePrivate methods and enums to perform
> number parse/format.
>
> * QString
> * QByteArray
> * QIntValidator
> * QDoubleValidatorPrivate
> * QTextStream
> * QTextStreamPrivate
>
> Other classes call public QLocale methods for number symbols like
> decimalPoint() and negativeSign() to use in their own custom char-at-a-time
> parse/format routines which will cause an issue as ICU / CLDR define these
> symbols as strings and not chars.
QTextStream defaults to the C locale but it has a setLocale member for
changing that. QString and QByteArray can only do the C locale, except where
the system one is explicitly requested ("%L1").
The validators (which are in QtGui) need a setLocale too, but unlike
QTextStream they should default to the system locale.
Does anyone see a problem with different defaults?
> QString - Well behaved, only uses the QLocalePrivate number methods and
> enums. Mostly only uses C Locale, but does use Default Locale first in
> toInt() / toLong() / etc methods, and in arg() methods if %L override used.
See above.
> QByteArray - Very well behaved, only uses the QLocalePrivate number methods
> and enums, only uses C Locale.
Good, looks done.
> QIntValidator & QDoubleValidator - Very well behaved, only uses the
> QLocalePrivate number methods and enums. You can set/get locale to use,
> defaults to Default Locale but falls back to C Locale.
Falling back is a bad idea, unless a Nokian can dig up from the old history of
that codebase a compelling reason why it was done like that.
> QDateTimeParser is a private class used for basic date/time parsing in
> QLocale and QDateTime, but as a validating parser in QDateTimeEdit where it
> is very deeply embedded. It only uses the Default Locale unless you
> sub-class it. QLocale and QDateTime can easily port to use ICU (QDateTime
> probably using C Locale) but QDateTimeEdit still needs QDateTimeParser.
> It's not a great class or widget, so I'd suggest doing the minimal work
> required to port to ICU, rename it QDateTimeEditParser and move it to
> Widgets.
Agreed.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
Intel Sweden AB - Registration Number: 556189-6027
Knarrarnäsgatan 15, 164 40 Kista, Stockholm, Sweden
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 190 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.qt-project.org/pipermail/development/attachments/20120118/9783119f/attachment.sig>
More information about the Development
mailing list