30 const Profile& intl_profile) {
31 rapidjson::Document document;
32 auto& allocator = document.GetAllocator();
34 document.AddMember(
"method",
"setLocale", allocator);
35 rapidjson::Value
args(rapidjson::kArrayType);
37 for (
const auto& locale_id : intl_profile.locales()) {
38 UErrorCode error_code = U_ZERO_ERROR;
39 icu::Locale locale = icu::Locale::forLanguageTag(locale_id.id, error_code);
40 if (U_FAILURE(error_code)) {
41 FML_LOG(
ERROR) <<
"Error parsing locale ID \"" << locale_id.id <<
"\"";
44 args.PushBack(rapidjson::Value().SetString(locale.getLanguage(), allocator),
47 auto country = locale.getCountry() !=
nullptr ? locale.getCountry() :
"";
48 args.PushBack(rapidjson::Value().SetString(country, allocator), allocator);
50 auto script = locale.getScript() !=
nullptr ? locale.getScript() :
"";
51 args.PushBack(rapidjson::Value().SetString(script, allocator), allocator);
54 locale.getVariant() !=
nullptr ? locale.getVariant() :
"";
58 [](
unsigned char c) {
return std::tolower(c); });
59 args.PushBack(rapidjson::Value().SetString(variant, allocator), allocator);
62 document.AddMember(
"args",
args, allocator);
64 rapidjson::StringBuffer
buffer;
65 rapidjson::Writer<rapidjson::StringBuffer> writer(
buffer);
66 document.Accept(writer);
67 auto data =
reinterpret_cast<const uint8_t*
>(
buffer.GetString());
static const uint8_t buffer[]