forked from organicmaps/organicmaps
[generator] General transliteration getters
This commit is contained in:
parent
e958e56792
commit
c6d7be8ee3
2 changed files with 26 additions and 12 deletions
|
@ -12,12 +12,13 @@ namespace regions
|
|||
{
|
||||
namespace
|
||||
{
|
||||
// Languages in order for better transliterations for Russian. This is kind
|
||||
// Languages in order for better transliterations. This is kind
|
||||
// of workaround before real made translations.
|
||||
const std::vector<std::string> kRuPreferredLanguagesForTransliterate = {
|
||||
"en" /*English*/,
|
||||
"ru" /*Русский*/,
|
||||
};
|
||||
const std::unordered_map<RegionWithName::LanguageCode, RegionWithName::PreferredLanguages>
|
||||
kPreferredLanguagesForTransliterate = {
|
||||
{StringUtf8Multilang::GetLangIndex("ru"), {"en" /*English*/, "ru" /*Русский*/}},
|
||||
{StringUtf8Multilang::GetLangIndex("en"), {"en" /*English*/, "ru" /*Русский*/}}};
|
||||
|
||||
} // namespace
|
||||
|
||||
std::string RegionWithName::GetName(int8_t lang) const
|
||||
|
@ -27,9 +28,10 @@ std::string RegionWithName::GetName(int8_t lang) const
|
|||
return s;
|
||||
}
|
||||
|
||||
std::string RegionWithName::GetEnglishOrTransliteratedName() const
|
||||
std::string RegionWithName::GetTranslatedOrTransliteratedName(
|
||||
RegionWithName::LanguageCode languageCode) const
|
||||
{
|
||||
std::string s = GetName(StringUtf8Multilang::kEnglishCode);
|
||||
std::string s = GetName(languageCode);
|
||||
if (!s.empty() && strings::IsASCIIString(s))
|
||||
return s;
|
||||
|
||||
|
@ -47,12 +49,18 @@ std::string RegionWithName::GetEnglishOrTransliteratedName() const
|
|||
return base::ControlFlow::Continue;
|
||||
};
|
||||
|
||||
if (!m_name.ForEachLanguage(kRuPreferredLanguagesForTransliterate, fn))
|
||||
if (kPreferredLanguagesForTransliterate.count(languageCode) &&
|
||||
m_name.ForEachLanguage(kPreferredLanguagesForTransliterate.at(languageCode), fn))
|
||||
m_name.ForEach(fn);
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
std::string RegionWithName::GetEnglishOrTransliteratedName() const
|
||||
{
|
||||
return GetTranslatedOrTransliteratedName(StringUtf8Multilang::GetLangIndex("en"));
|
||||
}
|
||||
|
||||
StringUtf8Multilang const & RegionWithName::GetMultilangName() const { return m_name; }
|
||||
|
||||
void RegionWithName::SetMultilangName(StringUtf8Multilang const & name) { m_name = name; }
|
||||
|
|
|
@ -27,12 +27,18 @@ using BoostRect = boost::geometry::model::box<BoostPoint>;
|
|||
class RegionWithName
|
||||
{
|
||||
public:
|
||||
using LanguageCode = int8_t;
|
||||
using PreferredLanguages = std::vector<std::string>;
|
||||
|
||||
RegionWithName(StringUtf8Multilang const & name) : m_name(name) {}
|
||||
|
||||
// This function will take the following steps:
|
||||
// 1. Return the english name if it exists.
|
||||
// 2. Return transliteration if it succeeds.
|
||||
// 3. Otherwise, return empty string.
|
||||
/// This function will take the following steps:
|
||||
/// 1. Return the |languageCode| name if it exists.
|
||||
/// 2. Return transliteration trying to use kPrefferedLanguages first, then any, if it succeeds.
|
||||
/// 3. Otherwise, return empty string.
|
||||
std::string GetTranslatedOrTransliteratedName(LanguageCode languageCode) const;
|
||||
|
||||
/// GetTranslatedOrTransliteratedName for English
|
||||
std::string GetEnglishOrTransliteratedName() const;
|
||||
std::string GetName(int8_t lang = StringUtf8Multilang::kDefaultCode) const;
|
||||
StringUtf8Multilang const & GetMultilangName() const;
|
||||
|
|
Loading…
Add table
Reference in a new issue