2016-02-16 3 views
2

Я пытаюсь, чтобы мои пользователи искали данные по странам. Пользователи набирают название страны на своих родных языках. Однако моя база данных содержит только альфа-коды для каждой страны.конвертировать переведенные имена стран в alpha2 с pycountry и gettext

Мой текущий подход:

user_input = "France" 
country_code = pycountry.countries.get(name=user_input).alpha2 # u'FR' 

это работает отлично, если пользовательский ввод выполнен на английском языке. Поскольку данные показаны на предпочтительном для пользователей языке, она также будет искать его на своем предпочтительном языке.

С помощью Gettext с локалями pycountry, я имею возможность показать страну-имена в пользователях Языке:

# example for a German user 
gettext.translation('iso3166', pycountry.LOCALES_DIR, languages=['de']).install() 
country_code = 'FR' 
country = _(pycountry.countries.get(alpha2=country_code).name) # 'Frankreich' 

теперь я искал способ, чтобы перевести вход пользователей обратно на английский (предположим, нет опечаток) и извлечь код страны из него:

user_input = "Frankreich" 
translated_user_input = ??? # 'France' 
country_code = pycountry.countries.get(name=translated_user_input).alpha2 # u'FR' 

кто-нибудь хорошая идея, как этого добиться? В идеале, используя только gettext и picountry?

ответ

2

Я нашел решение, которое не может быть точно оптимизирована производительность, но работает и не слишком уродлив:

user_input = "Frankreich" 
country_code = ''.join([country.alpha2 for country in pycountry.countries if _(country.name) == user_input]) # u'FR' 
+0

кстати. Я использую '. '.join()' здесь, чтобы выровнять результирующий список до строки и получить пустые результаты на том же шаге. – Tim

Смежные вопросы