Django 语言翻译标签

3
我将使用django的{% language %}{% endlanguage %}标签来覆盖模板中文本的语言代码,使其与HTML选择列表中的不同语言代码相匹配。但是,目前这种方法并未生效!
以下是我的代码:
{% language '$("#id_language_code").val()' %}

    "{% trans 'to Present' %}" 

{% endlanguage %}

当用户从HTML选择列表中选择一个值时,$("#id_language_code").val()肯定会改变。如果我将$("#id_language_code").val()附加到上面的翻译字符串中,则显示更改后的语言代码,但翻译字符串不会改变。例如:

"{% trans 'to Present' %}" + $('#id_language_code').val() 

显示此内容(其中de是用户选择的语言代码,但“to Present”未翻译):

to Present de

如果我在 {% language %} 标签中硬编码语言代码,翻译字符串就会被翻译。例如:
{% language 'de' %}

有谁能指出我做错了什么吗?
2个回答

1
Django模板在服务器上渲染 - 在客户端执行js之前,因此Django不知道什么是 '$("#id_language_code").val()'。您需要将语言作为变量传递到模板上下文中。

谢谢。我觉得现在我对这个有更好的理解了。你有一个在模板上下文中作为 JavaScript 变量传递语言并且我可以在模板中使用的例子吗? - user1261774
将Django变量传递给JS:https://dev59.com/questions/vHVC5IYBdhLWcg3wbgdS - zymud

0

你似乎混淆了服务器端和客户端。

Django在服务器端渲染模板。浏览器接收到HTML内容,您可以使用JavaScript进行操作,但此时Django已经不再起作用。

文档有一个专门的章节介绍如何在JavaScript中使用翻译。简而言之,Django有一种方式将字典以翻译目录的形式暴露出来,您可以在JavaScript中使用它。您需要改变自己的方法,以便使用这个翻译目录来代替仅仅使用模板。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接