Improve OS::get_locale()
on macOS and Windows, replace "-" with "_" and use system macros instead of bitwise AND. Add locale format info to the documentation.
(cherry picked from commit f797e1c078
)
This commit is contained in:
parent
5167a0281a
commit
131f913747
3 changed files with 11 additions and 6 deletions
|
@ -256,7 +256,12 @@
|
||||||
<method name="get_locale" qualifiers="const">
|
<method name="get_locale" qualifiers="const">
|
||||||
<return type="String" />
|
<return type="String" />
|
||||||
<description>
|
<description>
|
||||||
Returns the host OS locale.
|
Returns the host OS locale as a string of the form [code]language_Script_COUNTRY_VARIANT@extra[/code].
|
||||||
|
[code]language[/code] - 2 or 3 letter [url=https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes]language code[/url], in lower case.
|
||||||
|
[code]Script[/code] - optional, 4 letter [url=https://en.wikipedia.org/wiki/ISO_15924]script code[/url], in title case.
|
||||||
|
[code]COUNTRY[/code] - optional, 2 or 3 letter [url=https://en.wikipedia.org/wiki/ISO_3166-1]country code[/url], in upper case.
|
||||||
|
[code]VARIANT[/code] - optional, language variant, region and sort order. Variant can have any number of underscored key words.
|
||||||
|
[code]extra[/code] - optional, semicolon separated list of additional key words. Currency, calendar, sort order and numbering system information.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="get_model_name" qualifiers="const">
|
<method name="get_model_name" qualifiers="const">
|
||||||
|
|
|
@ -2398,7 +2398,7 @@ Error OS_OSX::shell_open(String p_uri) {
|
||||||
|
|
||||||
String OS_OSX::get_locale() const {
|
String OS_OSX::get_locale() const {
|
||||||
NSString *locale_code = [[NSLocale preferredLanguages] objectAtIndex:0];
|
NSString *locale_code = [[NSLocale preferredLanguages] objectAtIndex:0];
|
||||||
return [locale_code UTF8String];
|
return String([locale_code UTF8String]).replace("-", "_");
|
||||||
}
|
}
|
||||||
|
|
||||||
void OS_OSX::swap_buffers() {
|
void OS_OSX::swap_buffers() {
|
||||||
|
|
|
@ -3111,21 +3111,21 @@ String OS_Windows::get_locale() const {
|
||||||
|
|
||||||
LANGID langid = GetUserDefaultUILanguage();
|
LANGID langid = GetUserDefaultUILanguage();
|
||||||
String neutral;
|
String neutral;
|
||||||
int lang = langid & ((1 << 9) - 1);
|
int lang = PRIMARYLANGID(langid);
|
||||||
int sublang = langid & ~((1 << 9) - 1);
|
int sublang = SUBLANGID(langid);
|
||||||
|
|
||||||
while (wl->locale) {
|
while (wl->locale) {
|
||||||
if (wl->main_lang == lang && wl->sublang == SUBLANG_NEUTRAL)
|
if (wl->main_lang == lang && wl->sublang == SUBLANG_NEUTRAL)
|
||||||
neutral = wl->locale;
|
neutral = wl->locale;
|
||||||
|
|
||||||
if (lang == wl->main_lang && sublang == wl->sublang)
|
if (lang == wl->main_lang && sublang == wl->sublang)
|
||||||
return wl->locale;
|
return String(wl->locale).replace("-", "_");
|
||||||
|
|
||||||
wl++;
|
wl++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (neutral != "")
|
if (neutral != "")
|
||||||
return neutral;
|
return String(neutral).replace("-", "_");
|
||||||
|
|
||||||
return "en";
|
return "en";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue