我有django翻译的奇怪问题,我需要帮助搞清楚。问题是,每当我看起来随机翻译字符串或默认字符串时,而不是获取翻译字符串。
我创建了一个用于在多个页面上放置“动作”按钮的类。其中许多按钮都是可重复使用的,所以为什么要放
<a href="something">blabla</a>
进入几个模板
toolbar.add(tool)
在视图中,然后只使用templatetag渲染所有工具....无论如何。
这是一个工具的示例:
class NewUserGroupButton(MyTool):
tool_id = 'new-user-group'
button_label = ugettext(u'Create new user group')
tool_href = 'new/'
js = ()
def render(self):
s = '<a id="%(tool_id)s" href="%(tool_href)s" class="button blue">%(button_label)s</a>'
return s % {'tool_id': self.tool_id, 'tool_href': self.tool_href, 'button_label':self.button_label}
工具的呈现方式如下:
class ToolbarTools:
def __init__(self):
self.tools = []
def add(self, tool):
self.tools.append(tool)
def render(self):
# Organize tools by weight
self.tools.sort(key=lambda x: x.weight)
# Render tools
output = '<ul id="toolbar" class="clearfix">'
for tool in self.tools:
output += '<li id="%s">' % ('tool-'+ tool.tool_id)
output += tool.render() if tool.renderable else ''
output += '</li>'
output += '</ul>'
# Reset tools container
self.tools = []
return mark_safe(output)
使用ugettext翻译字符串。使用(u)gettext = lambda s:s或ugettext_lazy给我或者没有与函数选择对应的翻译或代理对象。
就像我说的那样 - 当页面的其余部分使用正确的语言时,工具栏按钮似乎是随机翻译的。如果我使用不同的“工具”在不同页面之间移动,或者甚至多次刷新同一页面,则错误行为保持一致。
有人可以帮我弄清楚导致这个问题的原因以及解决方法吗?
答案 0 :(得分:2)
问题解决了。
问题本身(随机翻译)可能是由使用ugettext引起的。但同时我应该使用ugettext_lazy代替。
因此问题确实来自ugettext_lazy返回代理对象未翻译的字符串......这是由此引起的:
[报价] 使用延迟翻译对象 无论在Python中使用unicode字符串(类型为unicode的对象),都可以使用ugettext_lazy()调用的结果。如果您尝试在期望bytestring(str对象)的地方使用它,那么事情将无法按预期工作,因为ugettext_lazy()对象不知道如何将自身转换为bytestring。您也不能在bytestring中使用unicode字符串,因此这与普通的Python行为一致。例如:
This is fine: putting a unicode proxy into a unicode string.
u"Hello %s" % ugettext_lazy("people")
This will not work, since you cannot insert a unicode object
into a bytestring (nor can you insert our unicode proxy there)
"Hello %s" % ugettext_lazy("people")
[/报价]
取自这里: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#working-with-lazy-translation-objects
艾伦