0

我正在使用 django 和标准国际化包,如:优秀的 marina mele tuto 所示。

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

要创建国家/地区列表,我打算使用 django-country,它似乎很容易且有据可查。

我可以做一个 API,没有模板,来请求国家列表。

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

任何例子都会受到欢迎。

谢谢

4

4 回答 4

1

我假设你在谈论django-countries?除了确保用户的语言被激活之外,您不需要做任何事情translation.activate(language),如果您使用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 }}

应该可以工作,只要您的用户的语言被激活。

于 2017-05-03T13:26:45.293 回答
0

万一有人还在寻找如何做到这一点。这很容易,很大程度上要感谢@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]

这就是你所需要的!

于 2020-07-21T14:45:53.207 回答
0

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

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

于 2017-05-03T13:17:13.027 回答
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

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

于 2017-05-03T14:27:49.053 回答