@@ -20,48 +20,39 @@ std::vector<LanguageInfo> GetPreferredLanguageInfo() {
2020 FT_LOG (Error) << " i18n_ulocale_get_default() failed." ;
2121 return languages;
2222 }
23- std::string preferred_locale (locale);
24- size_t codeset_pos = preferred_locale.find (" ." );
25- preferred_locale = preferred_locale.substr (0 , codeset_pos);
26-
27- int32_t count = i18n_ulocale_count_available ();
28- languages.reserve (count);
29- for (int i = 0 ; i < count; i++) {
30- LanguageInfo info;
31- int ret;
32- char buffer[128 ] = {0 };
33- int32_t size;
34-
35- // The "language" field is required.
36- locale = i18n_ulocale_get_available (i);
37- ret = i18n_ulocale_get_language (locale, buffer, sizeof (buffer), &size);
38- if (ret != I18N_ERROR_NONE || size == 0 ) {
39- continue ;
40- }
41- info.language = std::string (buffer, size);
42-
43- // "country", "script", and "variant" are optional.
44- size = i18n_ulocale_get_country (locale, buffer, sizeof (buffer), &ret);
45- if (ret == I18N_ERROR_NONE && size > 0 ) {
46- info.country = std::string (buffer, size);
47- }
48- size = i18n_ulocale_get_script (locale, buffer, sizeof (buffer));
49- if (size > 0 ) {
50- info.script = std::string (buffer, size);
51- }
52- size = i18n_ulocale_get_variant (locale, buffer, sizeof (buffer));
53- if (size > 0 ) {
54- info.variant = std::string (buffer, size);
55- }
23+ std::string locale_string (locale);
24+ size_t codeset_pos = locale_string.find (" ." );
25+ locale_string = locale_string.substr (0 , codeset_pos);
26+ locale = locale_string.c_str ();
27+
28+ LanguageInfo info;
29+ char buffer[128 ] = {0 };
30+ int32_t size;
31+
32+ // The "language" field is required.
33+ ret = i18n_ulocale_get_language (locale, buffer, sizeof (buffer), &size);
34+ if (ret != I18N_ERROR_NONE || size == 0 ) {
35+ FT_LOG (Error) << " i18n_ulocale_get_language() failed." ;
36+ return languages;
37+ }
38+ info.language = std::string (buffer, size);
5639
57- if (preferred_locale.compare (locale) == 0 ) {
58- languages.insert (languages.begin (), info);
59- } else {
60- languages.push_back (info);
61- }
40+ // "country", "script", and "variant" are optional.
41+ size = i18n_ulocale_get_country (locale, buffer, sizeof (buffer), &ret);
42+ if (ret == I18N_ERROR_NONE && size > 0 ) {
43+ info.country = std::string (buffer, size);
44+ }
45+ size = i18n_ulocale_get_script (locale, buffer, sizeof (buffer));
46+ if (size > 0 ) {
47+ info.script = std::string (buffer, size);
48+ }
49+ size = i18n_ulocale_get_variant (locale, buffer, sizeof (buffer));
50+ if (size > 0 ) {
51+ info.variant = std::string (buffer, size);
6252 }
63- FT_LOG (Info) << " Found " << languages. size () << " locales. " ;
53+ FT_LOG (Info) << " Device language: " << info. language << " _ " << info. country ;
6454
55+ languages.push_back (info);
6556 return languages;
6657}
6758
0 commit comments