我正在使用 django 和标准国际化包,如:优秀的 marina mele tuto 所示。
在网络和移动设备上的用户表单中,我必须以用户的语言显示国家名称列表。
要创建国家/地区列表,我打算使用 django-country,它似乎很容易且有据可查。
我可以做一个 API,没有模板,来请求国家列表。
但是如何在 views.py 中翻译这个国家/地区列表?
任何例子都会受到欢迎。
谢谢
我正在使用 django 和标准国际化包,如:优秀的 marina mele tuto 所示。
在网络和移动设备上的用户表单中,我必须以用户的语言显示国家名称列表。
要创建国家/地区列表,我打算使用 django-country,它似乎很容易且有据可查。
我可以做一个 API,没有模板,来请求国家列表。
但是如何在 views.py 中翻译这个国家/地区列表?
任何例子都会受到欢迎。
谢谢
我假设你在谈论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 }}
应该可以工作,只要您的用户的语言被激活。
万一有人还在寻找如何做到这一点。这很容易,很大程度上要感谢@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]
这就是你所需要的!
您可以查看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
我希望有人能给我们一个更简单、更快、更清洁的解决方案。谢谢你的帮助。铝