Merge pull request #5887 from darina/single-name-scheme

When the language of the user is equal to one of the languages of the…
This commit is contained in:
Yuri Gorshenin 2017-04-21 19:41:39 +03:00 committed by GitHub
commit 2ae9a8d2d0
4 changed files with 35 additions and 5 deletions

View file

@ -25,7 +25,7 @@ StringUtf8Multilang::Languages const g_languages = {
{"be", "Беларуская", "Belarusian-Latin/BGN"},
{"ka", "ქართული", "Georgian-Latin"},
{"ko", "한국어", "Hangul-Latin/BGN"},
{"he", "עברית", "Hebrew-Latin/BGN"},
{"he", "עברית", "Hebrew-Latin"},
{"nl", "Nederlands", ""},
{"ga", "Gaeilge", ""},
{"ja_rm", "Japanese (Romanized)", "Any-Latin"},
@ -33,7 +33,7 @@ StringUtf8Multilang::Languages const g_languages = {
{"it", "Italiano", ""},
{"es", "Español", ""},
{"zh_pinyin", "Chinese (Pinyin)", "Any-Latin"},
{"th", "ไทย", "Thai-Latin"},
{"th", "ไทย", ""}, // Thai-Latin
{"cy", "Cymraeg", ""},
{"sr", "Српски", "Serbian-Latin/BGN"},
{"uk", "Українська", "Ukrainian-Latin/BGN"},

View file

@ -63,7 +63,7 @@ bool Transliteration::Transliterate(std::string const & str, int8_t langCode, st
if (str.empty())
return false;
std::string const transliteratorId(StringUtf8Multilang::GetTransliteratorIdByCode(langCode));
std::string transliteratorId(StringUtf8Multilang::GetTransliteratorIdByCode(langCode));
if (transliteratorId.empty())
return false;
@ -81,12 +81,16 @@ bool Transliteration::Transliterate(std::string const & str, int8_t langCode, st
if (!it->second->m_initialized)
{
UErrorCode status = U_ZERO_ERROR;
UnicodeString translitId(it->first.c_str());
std::string const removeDiacriticRule = ";NFD;[\u02B9-\u02D3\u0301-\u0358]Remove;NFC";
transliteratorId.append(removeDiacriticRule);
UnicodeString translitId(transliteratorId.c_str());
it->second->m_transliterator.reset(Transliterator::createInstance(translitId, UTRANS_FORWARD, status));
if (it->second->m_transliterator == nullptr)
LOG(LWARNING, ("Cannot create transliterator \"", it->first, "\", icu error =", status));
LOG(LWARNING, ("Cannot create transliterator \"", transliteratorId, "\", icu error =", status));
it->second->m_initialized = true;
}

View file

@ -231,6 +231,11 @@ void GetPreferredNames(RegionData const & regionData, StringUtf8Multilang const
if (src.IsEmpty())
return;
// When the language of the user is equal to one of the languages of the MWM
// only single name scheme is used.
if (regionData.HasLanguage(deviceLang))
return GetReadableName(regionData, src, deviceLang, allowTranslit, primary);
vector<int8_t> const primaryCodes = {deviceLang,
StrUtf8::kInternationalCode,
StrUtf8::kEnglishCode};

View file

@ -169,6 +169,27 @@ UNIT_TEST(GetPrefferedNames)
}
}
UNIT_TEST(GetPrefferedNamesLocal)
{
feature::RegionData regionData;
regionData.SetLanguages({"kk", "ru"});
int8_t deviceLang = StrUtf8::GetLangIndex("ru");
string primary, secondary;
bool const allowTranslit = true;
{
StrUtf8 src;
src.AddString("default", "default name");
src.AddString("en", "en name");
feature::GetPreferredNames(regionData, src, deviceLang, allowTranslit, primary, secondary);
TEST_EQUAL(primary, "default name", ());
TEST_EQUAL(secondary, "", ());
}
}
UNIT_TEST(GetReadableName)
{
feature::RegionData regionData;