23 const Profile& intl_profile) {
24 rapidjson::Document document;
25 auto&
allocator = document.GetAllocator();
27 document.AddMember(
"method",
"setLocale",
allocator);
28 rapidjson::Value
args(rapidjson::kArrayType);
30 for (
const auto& locale_id : intl_profile.locales()) {
31 UErrorCode error_code = U_ZERO_ERROR;
32 icu::Locale locale = icu::Locale::forLanguageTag(locale_id.id, error_code);
33 if (U_FAILURE(error_code)) {
34 FML_LOG(ERROR) <<
"Error parsing locale ID \"" << locale_id.id <<
"\"";
37 args.PushBack(rapidjson::Value().SetString(locale.getLanguage(),
allocator),
40 auto country = locale.getCountry() !=
nullptr ? locale.getCountry() :
"";
43 auto script = locale.getScript() !=
nullptr ? locale.getScript() :
"";
47 locale.getVariant() !=
nullptr ? locale.getVariant() :
"";
50 std::transform(begin(variant),
end(variant), begin(variant),
51 [](
unsigned char c) {
return std::tolower(
c); });
57 rapidjson::StringBuffer buffer;
58 rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
59 document.Accept(writer);
60 auto data =
reinterpret_cast<const uint8_t*
>(buffer.GetString());