def test_countries(self): for s, country, expected in country_test_cases: languages = get_country_languages(country) self.assertTrue(bool(languages)) lang = disambiguate_language(s, languages.items()) self.assertEqual(lang, expected, '{} != {} for {}, langs={}'.format(lang, expected, s, languages.items()))
def test_countries(self): for s, country, expected in country_test_cases: languages = get_country_languages(country) self.assertTrue(bool(languages)) lang = disambiguate_language(s, languages.items()) self.assertEqual( lang, expected, '{} != {} for {}, langs={}'.format(lang, expected, s, languages.items()))
def test_regional(self): for s, country, k, v, expected in regional_test_cases: languages = get_country_languages(country) self.assertTrue(bool(languages)) regional = get_regional_languages(country, k, v) self.assertTrue(bool(regional)) regional.update(languages) lang = disambiguate_language(s, regional.items()) self.assertEqual(lang, expected, '{} != {} for {}, langs={}'.format(lang, expected, s, regional.items()))
def test_regional(self): for s, country, k, v, expected in regional_test_cases: languages = get_country_languages(country) self.assertTrue(bool(languages)) regional = get_regional_languages(country, k, v) self.assertTrue(bool(regional)) regional.update(languages) lang = disambiguate_language(s, regional.items()) self.assertEqual( lang, expected, '{} != {} for {}, langs={}'.format(lang, expected, s, regional.items()))
def best_country_and_language(self, latitude, longitude, name): country, candidate_languages, language_props = self.country_and_languages( latitude, longitude) if not (country and candidate_languages): return None, None num_langs = len(candidate_languages) default_langs = set( [l['lang'] for l in candidate_languages if l.get('default')]) num_defaults = len(default_langs) regional_defaults = 0 country_defaults = 0 regional_langs = set() country_langs = set() for p in language_props: if p['admin_level'] > 0: regional_defaults += sum( (1 for lang in p['languages'] if lang.get('default'))) regional_langs |= set([l['lang'] for l in p['languages']]) else: country_defaults += sum( (1 for lang in p['languages'] if lang.get('default'))) country_langs |= set([l['lang'] for l in p['languages']]) if num_langs == 1: return country, candidate_languages[0]['lang'] else: lang = disambiguate_language(name, [(l['lang'], l['default']) for l in candidate_languages]) default_lang = candidate_languages[0]['lang'] if lang == UNKNOWN_LANGUAGE and num_defaults == 1: return country, default_lang elif lang == AMBIGUOUS_LANGUAGE: return country, lang elif lang != UNKNOWN_LANGUAGE: if lang != default_lang and lang in country_langs and country_defaults > 1 and regional_defaults > 0 and lang in WELL_REPRESENTED_LANGUAGES: return country, UNKNOWN_LANGUAGE return country, lang else: return country, lang
def best_country_and_language(self, latitude, longitude, name): country, candidate_languages, language_props = self.country_and_languages(latitude, longitude) if not (country and candidate_languages): return None, None num_langs = len(candidate_languages) default_langs = set([l['lang'] for l in candidate_languages if l.get('default')]) num_defaults = len(default_langs) regional_defaults = 0 country_defaults = 0 regional_langs = set() country_langs = set() for p in language_props: if p['admin_level'] > 0: regional_defaults += sum((1 for lang in p['languages'] if lang.get('default'))) regional_langs |= set([l['lang'] for l in p['languages']]) else: country_defaults += sum((1 for lang in p['languages'] if lang.get('default'))) country_langs |= set([l['lang'] for l in p['languages']]) if num_langs == 1: return country, candidate_languages[0]['lang'] else: lang = disambiguate_language(name, [(l['lang'], l['default']) for l in candidate_languages]) default_lang = candidate_languages[0]['lang'] if lang == UNKNOWN_LANGUAGE and num_defaults == 1: return country, default_lang elif lang == AMBIGUOUS_LANGUAGE: return country, lang elif lang != UNKNOWN_LANGUAGE: if lang != default_lang and lang in country_langs and country_defaults > 1 and regional_defaults > 0 and lang in WELL_REPRESENTED_LANGUAGES: return country, UNKNOWN_LANGUAGE return country, lang else: return country, lang