Add -i/--input option to locale(1)

The default UI language returned by GetUserDefaultUILanguage does not
necessarily reflect what the user really wants.  E. g., the system could
be en_US, but the desired language is en_CA, without having a CA langpack
installed.

Changing the settings under "Languages" and changing the keyboard layout
is only affecting the so-called  "Input language", while what's returned
by GetUserDefaultUILanguage is the "Display language".  Changing the
latter requires installing MUI langpacks.

Thus, we introduce a way to fetch the "Input language" using the -i or
--input option.

Also clean up documentation of locale(1).

Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
Corinna Vinschen 2016-08-17 10:58:04 +02:00
parent b0d341442c
commit c02ac89f28
2 changed files with 34 additions and 14 deletions

View File

@ -787,7 +787,7 @@ ldd [OPTION]... FILE...
<screen>
locale [-amvhV]
locale [-ck] NAME
locale [-usfnU]
locale [-iusfnU]
</screen>
</refsynopsisdiv>
@ -807,6 +807,7 @@ Modify output format:
Default locale information:
-i, --input Print current input locale
-u, --user Print locale of user's default UI language
-s, --system Print locale of system default UI language
-f, --format Print locale of user's regional format settings
@ -826,20 +827,34 @@ Other options:
<para><command>locale</command> without parameters prints information about
the current locale environment settings.</para>
<para>The <literal>-u</literal>, <literal>-s</literal>,
<literal>-f</literal>, and <literal>-n</literal> options can be used to
request the various Windows locale settings. The purpose is to use this
command in scripts to set the POSIX locale variables.</para>
<para>The <literal>-i</literal>, <literal>-u</literal>,
<literal>-s</literal>, <literal>-f</literal>, and <literal>-n</literal>
options can be used to request the various Windows locale settings. The
purpose is to use this command in scripts to set the POSIX locale
variables.</para>
<para>The <literal>-i</literal> option prints the current input language.
This is called the "Input language" and basically equivalent to the
current keyboard layout setting.</para>
<para>The <literal>-u</literal> option prints the current user's Windows UI
locale to stdout. In Windows this setting is called the
"Display Language". The <literal>-s</literal> option prints the systems
default instead. The <literal>-f</literal> option prints the user's
setting for time, date, number and currency. That's equivalent to the
setting in the "Formats" or "Regional Options" tab in the "Region and
Language" or "Regional and Language Options" dialog. With the
<literal>-U</literal> option <command>locale</command> appends a
".UTF-8".</para>
"Display Language".</para>
<para>The <literal>-s</literal> option prints the systems default instead.
</para>
<para>The <literal>-f</literal> option prints the user's setting for time,
date, number and currency. That's equivalent to the setting in the
"Formats" or "Regional Options" tab in the "Region and Language" or
"Regional and Language Options" dialog.</para>
<para>The <literal>-n</literal> option prints the system's default
language used for applications which don't support Unicode.</para>
<para>With the <literal>-U</literal> option <command>locale</command>
appends the string ".UTF-8" to enforce using UTF-8. Using UTF-8
as codeset is recommended.</para>
<para>Usage example:</para>

View File

@ -48,7 +48,7 @@ usage ()
printf (
"Usage: %1$s [-amvhV]\n"
" or: %1$s [-ck] NAME\n"
" or: %1$s [-usfnU]\n"
" or: %1$s [-iusfnU]\n"
"\n"
"Get locale-specific information.\n"
"\n"
@ -65,6 +65,7 @@ usage ()
"\n"
"Default locale information:\n"
"\n"
" -i, --input Print current input locale\n"
" -u, --user Print locale of user's default UI language\n"
" -s, --system Print locale of system default UI language\n"
" -f, --format Print locale of user's regional format settings\n"
@ -93,6 +94,7 @@ struct option longopts[] = {
{"category-name", no_argument, NULL, 'c'},
{"format", no_argument, NULL, 'f'},
{"help", no_argument, NULL, 'h'},
{"input", no_argument, NULL, 'i'},
{"keyword-name", no_argument, NULL, 'k'},
{"charmaps", no_argument, NULL, 'm'},
{"no-unicode", no_argument, NULL, 'n'},
@ -103,7 +105,7 @@ struct option longopts[] = {
{"version", no_argument, NULL, 'V'},
{0, no_argument, NULL, 0}
};
const char *opts = "acfhkmnsuUvV";
const char *opts = "acfhikmnsuUvV";
int
getlocale (LCID lcid, char *name)
@ -786,6 +788,9 @@ main (int argc, char **argv)
case 'm':
maps = 1;
break;
case 'i':
lcid = (UINT_PTR) GetKeyboardLayout (0) & 0xffff;
break;
case 's':
lcid = GetSystemDefaultUILanguage ();
break;