哪种翻译来自strftime的消息最好/最简单,如"time data '2012' does not match format '%d.%m.%Y'"
或"day is out of range for month"
?
我问,因为我已经使用DateField类型的Flask,Flask-WTForms和Fields编写了一个应用程序。对于我使用Flask-Babel / gettext的其他消息,但是这个错误消息似乎是直接来自不使用gettext的strftime。
谢谢!
2012-07-24:添加一些示例代码(请尝试使用“2012-2-30”之类的日期):
from flask import Flask, render_template
from flask.ext.wtf import Form, DateField
class DateForm(Form):
date = DateField(u"Date")
DEBUG = True
SECRET_KEY = 'secret'
app = Flask(__name__)
app.config.from_object(__name__)
@app.route("/", methods=("GET", "POST",))
def index():
form = DateForm()
if form.validate_on_submit():
pass
return render_template("simple.html", form=form)
if __name__ == "__main__":
app.run()
模板“simple.html”:
<!DOCTYPE html>
<html>
<body>
<form method="POST" enctype="multipart/form-data">
{% if form.date.errors %}
{{ form.errors }}
{% endif %}
{{ form.hidden_tag() }}
{{ form.date.label }}
{{ form.date|safe }}
<input type="submit" value="Submit">
</form>
</body>
</html>
答案 0 :(得分:1)
简短版本:你不应该:异常是采取行动,而不是翻译。
概念上,用于用户的消息和用于开发人员的消息(如运行时异常)之间存在差异。
翻译异常与翻译if ... then ... else
构造一样有意义:开发人员应该知道编程语言,而不需要翻译它。
虽然在大多数情况下,异常是由错误引起的(因此在部署的代码中不应该存在),但在某些情况下,它们可能会发出一个对程序来说是生理状态的信号。如果此条件需要用户执行操作,则代码应捕获有问题的异常并向用户显示对她/他有意义的消息。一个例子:
知道:
>>> int('text')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'text'
您可以编写这样的程序(当然使用您喜欢的人类语言为用户使用消息):
>>> while True:
... n = raw_input('What do you want to multiply 10 for? ')
... try:
... print 'The result is: %d' % (10 * int(n))
... except ValueError:
... print 'You should provide an integer number...'
请注意,我们只捕获ValueError
,因为这是我们软件唯一的“生理”情况。任何其他异常都会使程序崩溃,因为它代表了开发人员没有考虑的条件。
关于验证的说法:如果您的方案是用户必须以特定格式插入日期的方案,那么验证其输入可能会更好在尝试处理它之前。上面的例子应该变成:
>>> while True:
... n = raw_input('What do you want to multiply 10 for? ')
... if not all((c in '0123456789' for c in n)):
... print 'You should provide an integer number...'
... continue
... print 'The result is: %d' % (10 * int(n))
虽然在python中,主要是是一种风格问题,无论是捕获异常还是验证输入(在其他语言中可能不是这种情况,因为有时异常处理的速度比处理慢得多检查条件),在Web开发中习惯于也(即另外要检查输入服务器端,你应该总是这样做)用javascript验证输入客户端,因为这样可以节省时间到用户和CPU到提供者,消除了请求/响应周期。
HTH!