forked from organicmaps/organicmaps
review fixes
This commit is contained in:
parent
3e2bce4bb1
commit
b268734f93
5 changed files with 71 additions and 47 deletions
|
@ -38,6 +38,7 @@ set(
|
|||
street_regions_tracing_tests.cpp
|
||||
tag_admixer_test.cpp
|
||||
tesselator_test.cpp
|
||||
translation_test.cpp
|
||||
triangles_tree_coding_test.cpp
|
||||
types_helper.hpp
|
||||
ugc_test.cpp
|
||||
|
|
|
@ -487,46 +487,3 @@ UNIT_TEST(RegionsBuilderTest_GenerateRusSPetersburgSuburb)
|
|||
());
|
||||
*/
|
||||
}
|
||||
|
||||
// Transliteration tests ---------------------------------------------------------------------------
|
||||
using Translations = std::vector<std::pair<std::string, std::string>>;
|
||||
bool TestTransliteration(Translations const & translations,
|
||||
std::string const & expectedTransliteration)
|
||||
{
|
||||
StringUtf8Multilang regionName;
|
||||
for (auto const & langAndTranslation : translations)
|
||||
{
|
||||
regionName.AddString(langAndTranslation.first, langAndTranslation.second);
|
||||
}
|
||||
RegionWithName region(regionName);
|
||||
return region.GetTranslatedOrTransliteratedName(StringUtf8Multilang::GetLangIndex("en")) ==
|
||||
expectedTransliteration;
|
||||
}
|
||||
|
||||
UNIT_TEST(RegionTransliteration)
|
||||
{
|
||||
Transliteration & translit = Transliteration::Instance();
|
||||
translit.Init(GetPlatform().ResourcesDir());
|
||||
|
||||
Translations const scotlandTranslations = {
|
||||
{"default", "Scotland"}, {"be", "Шатландыя"}, {"cs", "Skotsko"}, {"cy", "Yr Alban"},
|
||||
{"da", "Skotland"}, {"de", "Schottland"}, {"eo", "Skotlando"}, {"es", "Escocia"},
|
||||
{"eu", "Eskozia"}, {"fi", "Skotlanti"}, {"fr", "Écosse"}, {"ga", "Albain"},
|
||||
{"gd", "Alba"}, {"hr", "Škotska"}, {"ia", "Scotia"}, {"io", "Skotia"},
|
||||
{"ja", "スコットランド"}, {"ku", "Skotland"}, {"lfn", "Scotland"}, {"nl", "Schotland"},
|
||||
{"pl", "Szkocja"}, {"ru", "Шотландия"}, {"sco", "Scotland"}, {"sk", "Škótsko"},
|
||||
{"sr", "Шкотска"}, {"sv", "Skottland"}, {"tok", "Sukosi"}, {"tzl", "Escot"},
|
||||
{"uk", "Шотландія"}, {"vo", "Skotän"}, {"zh", "苏格兰"}};
|
||||
|
||||
Translations const michiganTranslations = {
|
||||
{"default", "Michigan"}, {"ar", "ميشيغان"}, {"az", "Miçiqan"}, {"be", "Мічыган"},
|
||||
{"bg", "Мичиган"}, {"br", "Michigan"}, {"en", "Michigan"}, {"eo", "Miĉigano"},
|
||||
{"es", "Míchigan"}, {"fa", "میشیگان"}, {"haw", "Mikikana"}, {"he", "מישיגן"},
|
||||
{"hy", "Միչիգան"}, {"ja", "ミシガン州"}, {"ko", "미시간"}, {"lt", "Mičiganas"},
|
||||
{"lv", "Mičigana"}, {"nv", "Míshigin"}, {"pl", "Michigan"}, {"ru", "Мичиган"},
|
||||
{"sr", "Мичиген"}, {"ta", "மிச்சிகன்"}, {"th", "รัฐมิชิแกน"}, {"tl", "Misigan"},
|
||||
{"uk", "Мічиган"}, {"yi", "מישיגן"}, {"zh", "密歇根州"}};
|
||||
|
||||
TEST(TestTransliteration(scotlandTranslations, "Shotlandiya"), ());
|
||||
TEST(TestTransliteration(michiganTranslations, "Michigan"), ());
|
||||
}
|
||||
|
|
58
generator/generator_tests/translation_test.cpp
Normal file
58
generator/generator_tests/translation_test.cpp
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include "testing/testing.hpp"
|
||||
|
||||
#include "generator/translation.hpp"
|
||||
|
||||
#include "coding/transliteration.hpp"
|
||||
|
||||
#include "platform/platform.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
|
||||
using namespace generator;
|
||||
|
||||
// Transliteration tests ---------------------------------------------------------------------------
|
||||
using Translations = std::vector<std::pair<std::string, std::string>>;
|
||||
bool TestTransliteration(Translations const & translations,
|
||||
std::string const & expectedTransliteration,
|
||||
std::string const & lang)
|
||||
{
|
||||
StringUtf8Multilang name;
|
||||
for (auto const & langAndTranslation : translations)
|
||||
{
|
||||
name.AddString(langAndTranslation.first, langAndTranslation.second);
|
||||
}
|
||||
return GetTranslatedOrTransliteratedName(name, StringUtf8Multilang::GetLangIndex(lang)) ==
|
||||
expectedTransliteration;
|
||||
}
|
||||
|
||||
UNIT_TEST(Transliteration)
|
||||
{
|
||||
Transliteration & translit = Transliteration::Instance();
|
||||
translit.Init(GetPlatform().ResourcesDir());
|
||||
|
||||
Translations const scotlandTranslations = {
|
||||
{"default", "Scotland"}, {"be", "Шатландыя"}, {"cs", "Skotsko"}, {"cy", "Yr Alban"},
|
||||
{"da", "Skotland"}, {"de", "Schottland"}, {"eo", "Skotlando"}, {"es", "Escocia"},
|
||||
{"eu", "Eskozia"}, {"fi", "Skotlanti"}, {"fr", "Écosse"}, {"ga", "Albain"},
|
||||
{"gd", "Alba"}, {"hr", "Škotska"}, {"ia", "Scotia"}, {"io", "Skotia"},
|
||||
{"ja", "スコットランド"}, {"ku", "Skotland"}, {"lfn", "Scotland"}, {"nl", "Schotland"},
|
||||
{"pl", "Szkocja"}, {"ru", "Шотландия"}, {"sco", "Scotland"}, {"sk", "Škótsko"},
|
||||
{"sr", "Шкотска"}, {"sv", "Skottland"}, {"tok", "Sukosi"}, {"tzl", "Escot"},
|
||||
{"uk", "Шотландія"}, {"vo", "Skotän"}, {"zh", "苏格兰"}};
|
||||
|
||||
Translations const michiganTranslations = {
|
||||
{"default", "Michigan"}, {"ar", "ميشيغان"}, {"az", "Miçiqan"}, {"be", "Мічыган"},
|
||||
{"bg", "Мичиган"}, {"br", "Michigan"}, {"en", "Michigan"}, {"eo", "Miĉigano"},
|
||||
{"es", "Míchigan"}, {"fa", "میشیگان"}, {"haw", "Mikikana"}, {"he", "מישיגן"},
|
||||
{"hy", "Միչիգան"}, {"ja", "ミシガン州"}, {"ko", "미시간"}, {"lt", "Mičiganas"},
|
||||
{"lv", "Mičigana"}, {"nv", "Míshigin"}, {"pl", "Michigan"}, {"ru", "Мичиган"},
|
||||
{"sr", "Мичиген"}, {"ta", "மிச்சிகன்"}, {"th", "รัฐมิชิแกน"}, {"tl", "Misigan"},
|
||||
{"uk", "Мічиган"}, {"yi", "מישיגן"}, {"zh", "密歇根州"}};
|
||||
|
||||
TEST(TestTransliteration(scotlandTranslations, "Shotlandiya", "en"), ());
|
||||
TEST(TestTransliteration(michiganTranslations, "Michigan", "en"), ());
|
||||
TEST(TestTransliteration(scotlandTranslations, "Shotlandiya", "ru"), ());
|
||||
TEST(TestTransliteration(michiganTranslations, "Michigan", "ru"), ());
|
||||
}
|
|
@ -1,8 +1,11 @@
|
|||
#include "translation.hpp"
|
||||
|
||||
#include "base/string_utils.hpp"
|
||||
|
||||
#include "coding/transliteration.hpp"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
namespace
|
||||
{
|
||||
// Languages in order for better transliterations. This is kind
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include "3party/jansson/myjansson.hpp"
|
||||
#include "coding/string_utf8_multilang.hpp"
|
||||
|
||||
#include "3party/jansson/myjansson.hpp"
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
namespace generator
|
||||
{
|
||||
using LanguageCode = int8_t;
|
||||
|
||||
inline std::string GetName(StringUtf8Multilang const & name, int8_t lang)
|
||||
inline std::string GetName(StringUtf8Multilang const & name, LanguageCode lang)
|
||||
{
|
||||
std::string s;
|
||||
VERIFY(name.GetString(lang, s) != s.empty(), ());
|
||||
|
@ -15,8 +19,9 @@ inline std::string GetName(StringUtf8Multilang const & name, int8_t lang)
|
|||
}
|
||||
|
||||
/// This function will take the following steps:
|
||||
/// 1. Return the |languageCode| name if it exists.
|
||||
/// 2. Return transliteration trying to use kPreferredLanguagesForTransliterate
|
||||
/// 1. Return the |languageCode| name if it exists and is ASCII.
|
||||
/// 2. Try to get International name
|
||||
/// 3. Return transliteration trying to use kPreferredLanguagesForTransliterate
|
||||
/// first, then any, if it succeeds.
|
||||
/// 3. Otherwise, return empty string.
|
||||
std::string GetTranslatedOrTransliteratedName(StringUtf8Multilang const & name,
|
||||
|
|
Loading…
Add table
Reference in a new issue