django の翻訳に奇妙な問題があり、理解するのに助けが必要です。問題は、毎回翻訳された文字列を取得するのではなく、翻訳された文字列またはデフォルトの文字列をランダムに取得するように見えることです。
複数のページに「アクション」ボタンを配置するためのクラスを作成しました。これらのボタンの多くは再利用可能です。
<a href="something">blabla</a>
シンプルなツールバーを作成して使用できる場合、いくつかのテンプレートに
toolbar.add(tool)
ビューで、すべてのツールをレンダリングするために templatetag を使用するだけです....とにかく。
これは 1 つのツールの例です。
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 を使用すると、関数の選択に対応する翻訳またはプロキシ オブジェクトが得られません。
そして、私が言ったように - ページの残りの部分は正しい言語で書かれていますが、ツールバーのボタンはランダムに翻訳されているか翻訳されていないようです。異なる「ツール」を使用して異なるページ間を移動したり、同じページを数回更新したりしても、問題のある動作は一貫しています。
誰かがこの問題の原因とその修正方法を理解するのを手伝ってくれませんか?