[generator] General transliteration getters

This commit is contained in:
LaGrunge 2019-06-27 13:01:44 +03:00 committed by Tatiana Yan
parent e958e56792
commit c6d7be8ee3
2 changed files with 26 additions and 12 deletions

View file

@ -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; }

View file

@ -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;