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.
Format of locale on OS's
- windows: hexadecimal code consisting of a language code (lower 10 bits) and culture code (upper bits), aka Locale Identifier (LCID). Note: the LCID is the same for different variants of language like Norwegian (Bokmal) and Norwegian (Nynorsk) (they use the same locale settings)
- linux, unix: defined as [language[_territory][.codeset][@modifier]]
Where to find locale
the environment variable is LANG
here is a list for more specific variables:
|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.|
The LCID for "Language for non-Unicode programs" (aka system locale) can be found in the windows registry.
The LCID of "standards and formats" (aka user locale) doesn't seem to be in the registry nor in the environment variables of windows. There are some macros defined in windows.h that help getting these values.
How to access to locale
The function "get" that fetches the language environment variable (LANG) can be found in class EXECUTION_ENVIRONMENT
SHARED_EXEC_ENVIRONMENT: located here
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.
- Get the language id
- Use the locale id (convenient if SortID is needed)
in both cases the solution can be found the macros of windows.h
Locale id is formed by SortID and LanguageID.
SortID contains info on the language encoding (?) like japanese unicode order, japanese XJIS order, chinese unicode order, chinese BIG5 order,...
Macros for windows are contained in "windows.h".
Needed macro (the one that gets the user LCID): GetUserDefaultLCID()
The code looks like this:
language_id: NATURAL_32 is external "C inline use <windows.h>" alias "return GetUserDefaultLCID();" end
Queries for OS detection cam be found in class PLATFORM