Python 如何本地化我的WTForms验证消息?

Python 如何本地化我的WTForms验证消息?,python,unicode,localization,gettext,wtforms,Python,Unicode,Localization,Gettext,Wtforms,我几乎得到了本地化的验证消息,因为您可以看到它适用于英语和瑞典语: 中文: 瑞典人: 但当我切换到葡萄牙语时,会收到以下错误消息: Traceback (most recent call last): File "/media/Lexar/montao/lib/webapp2/webapp2.py", line 545, in dispatch return method(*args, **kwargs) File "/media/Lexar/montao/montaopro

我几乎得到了本地化的验证消息,因为您可以看到它适用于英语和瑞典语:

中文:

瑞典人:

但当我切换到葡萄牙语时,会收到以下错误消息:

Traceback (most recent call last):
  File "/media/Lexar/montao/lib/webapp2/webapp2.py", line 545, in dispatch
    return method(*args, **kwargs)
  File "/media/Lexar/montao/montaoproject/main.py", line 1749, in post
    current_user=self.current_user,
  File "/media/Lexar/montao/montaoproject/main.py", line 466, in render_jinja
    self.response.out.write(template.render(data))
  File "/media/Lexar/montao/montaoproject/jinja2/environment.py", line 894, in render
    return self.environment.handle_exception(exc_info, True)
  File "/media/Lexar/montao/montaoproject/templates/insert_jinja.html", line 249, in top-level template code
    <ul class="errors">{% for error in form.name.errors %}<li>{{ error }}</li>{% endfor %}</ul>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
my.po文件中的翻译部分是

msgid "Name is required"
msgstr "É necessário o nome"
我的python文件是这样开始的

#!/usr/bin/python
# -*- coding: utf-8 -*-
而且,我已经尽我所能设置了unicode和utf-8


感谢您的帮助

如果您想在翻译中使用unicode字符,您需要使用ugettext_lazy实用程序函数,而不是gettext_lazy。
正如函数名所提示的,主要区别在于ugettext_lazy是unicode,而gettext_lazy不是(顺便说一句,这使得它没有那么有用)


在使用时,您可以/应该尽可能使用unicode而不是默认字符串,也就是说,尽快将输入转换为unicode,并尽可能晚地将输出编码为相关编码。

您将什么函数别名为?谢谢您的提问。我的
\uu
是来自django.utils.translation import gettext\u lazy as\u的
,因此我使用的翻译函数是来自django的。该错误是由默认ASCII编码导致的,该编码用于将某些其他编码中的字符串解码为Unicode。python源文件和po文件保存在什么编码中?您的po文件中设置了什么内容类型和内容传输编码?您是否在python源文件中设置了默认编码:#/usr/bin/env python#encoding:utf-8您可能想尝试使用ugettext#u lazy而不是gettext#u lazy。我会把它作为一个答案。谢谢您,托马斯。这真的很有帮助。
#!/usr/bin/python
# -*- coding: utf-8 -*-