如何翻译django views.py中的国家/地区列表?

时间:2017-05-03 12:40:44

标签: python django internationalization django-countries

我正在使用django和标准的国际化包,如下所示:excellent marina mele tuto.

在网络和移动设备上的用户表单中,我必须以用户的语言显示国家/地区名称列表。

要创建国家/地区列表,我打算使用django-country,这似乎很容易并且有详细记录。

我可以使用一个API,无需模板来请求国家/地区列表。

但如何在views.py中翻译此国家/地区列表?

欢迎任何例子。

由于

4 个答案:

答案 0 :(得分:0)

您可以查看django-modeltranslation,该库用于从您的模型数据进行翻译。

否则,如果您要翻译国家/地区列表,可以构建新列表并在列表中的每个项目上使用内置的django翻译工具。

答案 1 :(得分:0)

我假设你在谈论django-countries?除了确保激活用户的语言translation.activate(language)之外,您不需要做任何其他事情,如果您使用i18n_urlpatterns,也会在Django的中间件中处理。从那里,它将使用内置的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 }}
只要用户的语言被激活,

就可以正常工作。

答案 2 :(得分:0)

最后,我使用的是一个简单的数组

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

我希望有人能给我们一个更简单,更快速,更清洁的解决方案。 谢谢你的帮助。 人

答案 3 :(得分:0)

以防有人仍在寻找操作方法。这很容易,很大程度上要感谢@slurms的解释并仔细阅读相关的docs(尽管花了我一些时间才能找到它们)。实际上非常简单。

首先,您需要添加必要的设置:

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]

这就是您所需要的!