Как перевести список стран в django views.py?
Я использую django и стандартный пакет интернационализации, как показано в: превосходный marina mele tuto.
В форме пользователя в Интернете и на мобильном устройстве я должен показать список названий стран на языке пользователя.
Чтобы создать список стран, я намерен использовать django-country, это кажется простым и хорошо задокументированным.
Я мог бы сделать один API, без шаблона, чтобы запросить список стран.
Но как перевести этот список стран в views.py?
Любой пример будет приветствоваться.
Спасибо
3 ответа
На случай, если кто-то все еще ищет, как это сделать. Это было довольно просто, во многом благодаря объяснению @slurms и прочтению соответствующих документов (хотя мне потребовалось некоторое время, чтобы их найти). На самом деле это очень просто.
Для начала вам нужно будет добавить необходимые настройки:
MIDDLEWARE = [
...
'django.middleware.locale.LocaleMiddleware'
...
]
USE_I18N = True
Затем получите язык из вашего запроса или другого параметра, и можно начать перевод, например:
from django.utils import translation
from django_countries import countries
def foo_bar(language):
translation.activate(language)
return [(translation.gettext(country.name), country.code) for country in countries]
Это все, что вам нужно!
Я полагаю, вы говорите о джанго-странах? Вам не нужно ничего делать, кроме как убедиться, что язык вашего пользователя активирован translation.activate(language)
, который также обрабатывается в промежуточном программном обеспечении Django, если вы используете i18n_urlpatterns
, Оттуда он будет использовать встроенный механизм gettext для получения названия страны на языке пользователя.
Вы можете использовать объекты страны в сериализаторе с django_countries.serializer_fields.CountryField
или в представлении с
from django_countries import countries
from django.http import JsonResponse
def countries_list(request):
for code, name in list(countries):
print(code, name)
return JsonResponse({
code: name for code, name in list(countries)
})
Или как вам нравится. В шаблоне:
{% load countries %}
{% get_country 'BR' as country %}
{{ country.name }}
должно работать, пока язык вашего пользователя активирован.
Вы можете взглянуть на https://github.com/deschler/django-modeltranslation, библиотека используется для перевода данных вашей модели.
В противном случае, если вы хотите перевести список стран, вы можете создать новый список и использовать встроенные инструменты перевода django для каждого элемента в списке.
Наконец, я использую простой массив
TranslatedCountries = {
'france': {
'en': u'france',
'fr': u'france',
},
'belgium': {
'en': u'belgium',
'fr': u'belgique',
},
'spain': {
'en': u'spain',
'fr': u'espagne',
},
'morocco': {
'en': u'morocco',
'fr': u'maroc',
},
}
и я получаю к нему доступ:
try:
CCC = TranslatedCountries[test_country.lower()][user_language.lower()]
except :
print "The country %s is not defines for the language %s" % (test_country.lower(),user_language.lower() )
CCC = test_country
print CCC
Я надеюсь, что кто-то даст нам более простое, быстрое и чистое решение. Спасибо тебе за помощь. Al