奇怪的django翻译行为
我对django的翻译有奇怪的问题,我需要帮助解决。问题是,每次我似乎都随机得到翻译字符串或默认字符串,而不是得到翻译字符串 我创建了一个类,用于在多个页面上放置“操作”按钮。这些按钮中有很多是可重复使用的,那么我为什么要把奇怪的django翻译行为,django,translation,gettext,Django,Translation,Gettext,我对django的翻译有奇怪的问题,我需要帮助解决。问题是,每次我似乎都随机得到翻译字符串或默认字符串,而不是得到翻译字符串 我创建了一个类,用于在多个页面上放置“操作”按钮。这些按钮中有很多是可重复使用的,那么我为什么要把 当我可以创建简单的工具栏并使用 工具栏。添加(工具) 在视图中,然后仅使用templatetag渲染所有工具。。。。无论如何 这是一个工具的示例: class NewUserGroupButton(MyTool): tool_id = 'new-user-grou
当我可以创建简单的工具栏并使用
工具栏。添加(工具)
在视图中,然后仅使用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 NewUserGroupButton(MyTool):
工具id='新用户组'
按钮\u label=ugettext(u‘创建新用户组’)
工具_href='new/'
js=()
def渲染(自):
s=“”
返回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)
类工具栏工具:
定义初始化(自):
self.tools=[]
def添加(自身、工具):
self.tools.append(工具)
def渲染(自):
#按重量组织工具
self.tools.sort(key=lambda x:x.weight)
#渲染工具
输出=''
对于self.tools中的工具:
输出+='- '%(“工具-”+tool.tool\u id)
如果tool.renderable else为“”,则输出+=tool.render()
输出+='
'
输出+='
'
#重置工具容器
self.tools=[]
返回标记_安全(输出)
我用ugettext翻译字符串。使用(u)gettext=lambda s:s或ugettext_lazy,我要么没有对应于函数选择的翻译,要么没有对应于函数选择的代理对象
正如我所说的,虽然页面的其余部分使用的是正确的语言,但工具栏按钮似乎是随机翻译或不翻译的。如果我使用不同的“工具”在不同的页面之间移动,甚至多次刷新同一页面,那么错误行为仍然是一致的
有人能帮我找出导致此问题的原因和解决方法吗?问题已解决
问题本身(随机翻译)可能是使用ugettext造成的。但同时我应该用ugettext_lazy来代替
因此,问题实际上来自ugettext\u延迟返回代理对象而不是转换的字符串。。。这是由以下原因造成的:
[引述]
使用惰性转换对象
在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")
[Quote]
摘自这里:
艾伦