我有一个表格可以用多语言文本更新用户的详细信息。在性别下拉列表中,它不会翻译性别的选择,如下所示:
我尝试使用 model.py 文件中的
gettext_noop
进行选择。我在 .po 文件中看到它们。但还是不行。我做错了什么?
模型.py
from django.utils.translation import gettext_noop
Account_sex = [('male',gettext_noop('Male')),('female',gettext_noop('Female'))] #List of tuples with choices. First one is what's stored in DB and second what is shown in html.
class Account(AbstractBaseUser):
first_name = models.CharField(max_length=50)
email = models.EmailField(max_length=100, unique=True)
sex = models.CharField(max_length=10, blank=True, null=True, choices=Account_sex, default='male')
视图.py
@login_required(login_url='login')
def edit_profile(request):
if request.user.is_authenticated:
current_user = Account.objects.get(id=request.user.id)
form = EditProfileForm(request.POST or None, instance=current_user)
if form.is_valid():
form.save()
messages.success(request,("Your profile has been updated!"))
return redirect('dashboard')
return render(request, 'accounts/edit_profile.html',context={'form':form}) #
else:
messages.success(request,('You must be logged in!'))
return redirect('login')
edit_profile.html
<div class="col col-auto form-group">
<label>{% trans "Sex" %}</label>
{{ form.sex }}
</div>
django.po
#: .\accounts\models.py:44
msgid "Male"
msgstr "Hombre"
#: .\accounts\models.py:44
msgid "Female"
msgstr "Mujer"
简单的答案是您需要使用
gettext_lazy
而不是 gettext_noop
。
gettext_noop
表示“这是一个可翻译的字符串”,用于 .po 文件等,但实际上并没有翻译它。例如,如果您需要在用户消息中使用已翻译的字符串,但在日志中使用未翻译的字符串,则这非常有用。但您需要使用 gettext_lazy
来实际翻译它(此处使用惰性版本来推迟翻译,直到知道用户选择的语言为止)。