Internationalization/locale
In computing, locale is a set of parameters that defines the user's language, country and any special variant preferences that the user wants to see in their user interface.
Contents
Format of locale on OS's
- windows (for unmanaged code): hexadecimal code consisting of a language code (lower 10 bits) and culture code (upper bits), aka Locale Identifier (LCID)
- linux, unix: defined as [language[_territory][.codeset][@modifier]]
Where to find locale
Linux
the environment variable is LANG
here is a list for more specific variables:
Locale category | Application |
---|---|
LC_COLLATE | Collation of strings (sort order.) |
LC_CTYPE | Classification and conversion of characters. |
LC_MESSAGES | Translations of yes and no. |
LC_MONETARY | Format of monetary values. |
LC_NUMERIC | Format of non-monetary numeric values. |
LC_TIME | Date and time formats. |
LC_ALL | Sets all of the above (overrides all of them.) |
LANG | Sets all the categories, but can be overridden by the individual locale categories. |
Windows
The LCID for "Language for non-Unicode programs" can be found in the windows registry.
The LCID of "standards and formats" doesn't seem to be in the registry nor in the environment variables of windows.
How to access to locale
Linux
Windows
In Eiffel there exist a "locale_id" in class WEL_COMPARE_ITEM_STRUCT that uses the macro MAKELCID to get the locale identifier (aka LCID) from the language id. SUBLANGID takes a language id and returns a sublanguage id like SUBLANG_ITALIAN_SWISS. PRIMARYLANGID takes a language id and returns a primary language id like SUBLANG_ITALIAN.
Two solutions:
- Find out how to get the language id
- Use the locale id (convenient if other data is needed)
References and useful links
- info about what's contained in a locale (language codes, time format,...)
- date and time notations
- Locale on wikipedia