forked from organicmaps/organicmaps
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:
commit
2ae9a8d2d0
4 changed files with 35 additions and 5 deletions
|
@ -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"},
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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};
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue