我正在使用django和标准的国际化包,如下所示:excellent marina mele tuto.
在网络和移动设备上的用户表单中,我必须以用户的语言显示国家/地区名称列表。
要创建国家/地区列表,我打算使用django-country,这似乎很容易并且有详细记录。
我可以使用一个API,无需模板来请求国家/地区列表。
但如何在views.py中翻译此国家/地区列表?
欢迎任何例子。
由于
答案 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]
这就是您所需要的!