Jump to content

KDE Core/Platform 11/Locale

From KDE Community Wiki

Locale

NOTE: This page concerns only the Locale functionality of KLocale, i.e. settings, formatting and parsing. It explicitly excludes Translation which is a different topic.

KLocale

  • Based on POSIX standard locales with many extensions.
  • Have own locale settings files

What's wrong with KLocale:

  • Gtk/Qt apps running under kde-workspace don't use the KDE locale
  • KDE apps running under other platforms/workspaces do not use host locale
  • Class merges settings, formatters, parsers and translations in one giant blob
  • Circular dependencies with KConfig and KCalendarSystem
  • Unnecessary dependency for Qt-Addon libraries

What's great about KLocale:

  • Users can customise workspace locale settings
  • Apps can customise locale settings
  • Many advanced settings and formats not in QLocale (yet)

QLocale

What's wrong with QLocale:

  • Not all KDE, CLDR or POSIX settings are supported
  • Users unable to change settings
  • Apps unable to change individual settings without sub-classing QSystemLocale (to/from string methods partially mitigate need for this)

What's good with QLocale:

  • Uses host settings on all platforms
  • Low-level common class so good for Qt Addons
  • Some settings not yet in KDE
  • QSystemLocale settings container that can be sub-classed

The Plan

  • Add all KDE settings that are also in CLDR to QLocale
  • Use QLocale to replace KLocale's role as settings container
    • Gives correct Windows, Mac, Gnome, Meego settings
  • KDE Workspace to set locale envvar on login if KDE locale different to system locale
    • Gives correct locale Gtk/Qt apps
  • KCM to load settings from QLocale, write out as both POSIX and CLDR format files only if user chooses different settings
    • locale envvar then set to absolute path to users POSIX file so all Gtk apps get right settings
    • QLocale loads CLDR(?) file so KDE/Qt apps get right settings
  • Apps use parser/formatter classes/api's to alter settings for one-off calls rather than changing the locale itself, or create a whole new locale object.
  • Settings not available in QLocale are used by formatter/parser classes
  • Remove our kde-runtime/l10n locale files
  • Remove currency files and api to new Qt Addon ISO Codes library

Big Questions

  • Breaks Source Compatibility in a big way, virtually every method and enum has a different name and parms as well as the different namespace. Keep KDE4support KLocale wrapped around QLocale?
  • Date/Time formats: Keep POSIX formats (need own formatter/parser that translates Unicode format) or switch to Unicode format (not SC, QDateTime may not support all our features)
  • How will QLocale load custom CLDR? Probably not via xml? Platform plugin? If not CLDR then fallback to custom POSIX file but lacks some settings.

What's missing in QLocale

  • ISO codes for language/country, uses enums instead [CLDR, already in data .h]
  • Digit Sets [CLDR]
  • Binary Formats [???]
  • Page Size [???]
  • Decimal Places [CLDR patterns]
  • Separate monetary number symbols (decimal, sign, etc) [Not in CLDR, POSIX only]
  • Monetary formatting options internal only not exposed
  • Digit grouping [CLDR patterns]
  • Week number systems [CLDR week vars]
  • Calendar systems [CLDR]
  • Duration [???]
  • Pretty format [???]
  • Day of Pray [???]
  • Working week start/end [CLDR]
  • ...

What's extra in QLocale

  • More locale metadata
  • Script
  • Quotes
  • Lists
  • More number symbols
  • Standalone month/day names
  • Read DateTime
  • ...