Как перевести список стран в 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

Другие вопросы по тегам