44
55#include " localization_channel.h"
66
7- #include < utils_i18n.h>
8-
9- #include < vector>
10-
117#include " flutter/shell/platform/tizen/flutter_tizen_engine.h"
128#include " flutter/shell/platform/tizen/tizen_log.h"
139#include " rapidjson/document.h"
1410#include " rapidjson/writer.h"
1511
16- static constexpr char kChannelName [] = " flutter/localization" ;
17-
1812namespace flutter {
1913
2014LocalizationChannel::LocalizationChannel (FlutterTizenEngine* engine)
21- : engine_(engine) {}
15+ : engine_(engine) {
16+ SendLocales ();
17+ }
2218
2319LocalizationChannel::~LocalizationChannel () {}
2420
2521void LocalizationChannel::SendLocales () {
26- const char * defualt_locale = nullptr ;
27- FlutterLocale* flutter_locale = nullptr ;
28- std::vector<FlutterLocale*> flutter_locales;
29-
30- int ret = i18n_ulocale_set_default (getenv (" LANG" ));
31- ret = i18n_ulocale_get_default (&defualt_locale);
32- if (ret != I18N_ERROR_NONE) {
33- FT_LOGE (" i18n_ulocale_get_default() failed." );
34- return ;
35- }
36-
37- std::string without_encoding_type (defualt_locale);
38- auto n = without_encoding_type.find (' .' );
39- without_encoding_type.erase (n, without_encoding_type.length () - n);
40-
41- flutter_locale = GetFlutterLocale (without_encoding_type.data ());
42- if (flutter_locale) {
43- FT_LOGI (" Choose Default locale[%s]" , without_encoding_type.data ());
44- flutter_locales.push_back (flutter_locale);
45- }
46-
47- int32_t count = i18n_ulocale_count_available ();
48- for (int i = 0 ; i < count; i++) {
49- const char * locale = i18n_ulocale_get_available (i);
50- if (without_encoding_type.compare (locale) != 0 ) {
51- flutter_locale = GetFlutterLocale (locale);
52- if (flutter_locale) {
53- flutter_locales.push_back (flutter_locale);
54- }
55- }
56- }
22+ std::vector<FlutterLocale*> flutter_locales = GetFlutterLocales ();
5723
5824 FT_LOGI (" Send %zu available locales" , flutter_locales.size ());
5925 // Send locales to engine
@@ -66,114 +32,6 @@ void LocalizationChannel::SendLocales() {
6632 }
6733}
6834
69- void LocalizationChannel::SendPlatformResolvedLocale () {
70- const char * locale;
71- int ret = i18n_ulocale_get_default (&locale);
72- if (ret != I18N_ERROR_NONE) {
73- FT_LOGE (" i18n_ulocale_get_default() failed." );
74- return ;
75- }
76-
77- FlutterLocale* flutter_locale = GetFlutterLocale (locale);
78- if (!flutter_locale) {
79- FT_LOGE (" Language code is required but not present." );
80- return ;
81- }
82-
83- rapidjson::Document document;
84- auto & allocator = document.GetAllocator ();
85-
86- document.SetObject ();
87- document.AddMember (" method" , " setPlatformResolvedLocale" , allocator);
88-
89- rapidjson::Value language_code, country_code, script_code, variant_code;
90- language_code.SetString (flutter_locale->language_code , allocator);
91- country_code.SetString (
92- flutter_locale->country_code ? flutter_locale->country_code : " " ,
93- allocator);
94- script_code.SetString (
95- flutter_locale->script_code ? flutter_locale->script_code : " " ,
96- allocator);
97- variant_code.SetString (
98- flutter_locale->variant_code ? flutter_locale->variant_code : " " ,
99- allocator);
100-
101- rapidjson::Value args (rapidjson::kArrayType );
102- args.Reserve (4 , allocator);
103- args.PushBack (language_code, allocator);
104- args.PushBack (country_code, allocator);
105- args.PushBack (script_code, allocator);
106- args.PushBack (variant_code, allocator);
107-
108- rapidjson::StringBuffer buffer;
109- rapidjson::Writer<rapidjson::StringBuffer> writer (buffer);
110- if (!document.Accept (writer)) {
111- FT_LOGE (" document.Accept failed!" );
112- return ;
113- }
114-
115- engine_->SendPlatformMessage (
116- kChannelName , reinterpret_cast <const uint8_t *>(buffer.GetString ()),
117- buffer.GetSize (), nullptr , nullptr );
118-
119- DestroyFlutterLocale (flutter_locale);
120- }
121-
122- FlutterLocale* LocalizationChannel::GetFlutterLocale (const char * locale) {
123- int capacity = 128 ;
124- char buffer[128 ] = {0 };
125- int bufSize;
126- int error;
127- char * language = nullptr ;
128- char * country = nullptr ;
129- char * script = nullptr ;
130- char * variant = nullptr ;
131-
132- // set language code, language code is a required field
133- error = i18n_ulocale_get_language (locale, buffer, capacity, &bufSize);
134- if (error == I18N_ERROR_NONE && bufSize > 0 ) {
135- language = new char [bufSize + 1 ];
136- memcpy (language, buffer, bufSize);
137- language[bufSize] = ' \0 ' ;
138- } else {
139- FT_LOGE (" i18n_ulocale_get_language failed!" );
140- return nullptr ;
141- }
142-
143- // set country code, country code is an optional field
144- bufSize = i18n_ulocale_get_country (locale, buffer, capacity, &error);
145- if (error == I18N_ERROR_NONE && bufSize > 0 ) {
146- country = new char [bufSize + 1 ];
147- memcpy (country, buffer, bufSize);
148- country[bufSize] = ' \0 ' ;
149- }
150-
151- // set script code, script code is an optional field
152- bufSize = i18n_ulocale_get_script (locale, buffer, capacity);
153- if (bufSize > 0 ) {
154- script = new char [bufSize + 1 ];
155- memcpy (script, buffer, bufSize);
156- script[bufSize] = ' \0 ' ;
157- }
158-
159- // set variant code, variant code is an optional field
160- bufSize = i18n_ulocale_get_variant (locale, buffer, capacity);
161- if (bufSize > 0 ) {
162- variant = new char [bufSize + 1 ];
163- memcpy (variant, buffer, bufSize);
164- variant[bufSize] = ' \0 ' ;
165- }
166-
167- FlutterLocale* flutter_locale = new FlutterLocale;
168- flutter_locale->struct_size = sizeof (FlutterLocale);
169- flutter_locale->language_code = language;
170- flutter_locale->country_code = country;
171- flutter_locale->script_code = script;
172- flutter_locale->variant_code = variant;
173-
174- return flutter_locale;
175- }
176-
17735void LocalizationChannel::DestroyFlutterLocale (FlutterLocale* flutter_locale) {
17836 if (flutter_locale) {
17937 if (flutter_locale->language_code ) {
0 commit comments