我是Django的新手,我正在开发一个i18n项目,事实是我在我的模板文件中使用 .manage.py makemessages / compilemessages
翻译了一些变量,但是当我使用 {% trans "my string" %}
时我对所有语言都有相同的"my string"
。
我做错了什么?这是 views.py 和 idioma.html
的代码<小时/> 的 views.py:
#some code here
def idioma(request):
output = _("Mensaje en espanol")
return render_to_response( 'idioma/idioma.html', { 'idioma' : output }, context_instance = RequestContext(request) )
<小时/> 的 idioma.html
{% load i18n %}
< form action="/i18n/setlang/" method="post">
{% csrf_token %}
< input name="next" type="hidden" value="{{ redirect_to }}" />
< select name="language" >
{% get_language_info_list for LANGUAGES as languages %}
{% for language in languages %}
< option value="{{ language.code }}">
{{ language.name_local }} ({{ language.code }})
< /option>
{% endfor %}
</select>
< input type="submit" value="Go" />
< /form>
La cadena es: {% trans idioma %}
{% trans "carro" %}
<小时/> 该应用程序将idioma变量从locale / path /中的.po和.mo文件转换为/ language /
但它不会翻译{%trans“carro”%}字符串。
发生了什么事?
感谢您的帮助!!!!
答案 0 :(得分:13)
您是否手动翻译了.po?
中的字符串 makemessages
只是将“carro”添加到.po中,在.po文件中生成类似的内容
#: idioma.html:45
msgid "carro"
msgstr ""
然后你必须编辑.po 手动添加该字符串的翻译,这样:
#: idioma.html:45
msgid "carro"
msgstr "car"
然后,当您完成所有.po字符串的翻译后,您可以运行compilemessages
:它将编译您的翻译。
注意:始终记住要查找,fuzzy
翻译。
如果你的.po
#: idioma.html:45
#, fuzzy
msgid "carro"
msgstr "car"
这意味着django由于某种原因试图自己翻译字符串(通常在您已经在一段不再使用的代码中使用该字符串时发生)。
您必须查看翻译并删除#, fuzzy
行:任何标有#, fuzzy
的翻译都不会在您的网页中翻译。
答案 1 :(得分:11)
我遇到了类似的问题,并且可以通过在我的设置文件中设置LOCALE_PATHS
来解决它。 LOCALE_PATHS
是目录路径的元组,其中django查找.mo和.po文件。这是一个例子:
# settings.py
LOCALE_PATHS = (
'/path/to/your/project/locale',
)
答案 2 :(得分:1)
见
在某些情况下{% trans "your string " %}
不起作用
因此我建议您使用blocktrans
而不是trans for strings
如何使用blocktrans
{% blocktrans %} your strnig {% endblocktrans %}
答案 3 :(得分:1)
我整夜跟踪代码,发现了一些线索。主要在trans_real.py和gettext.py中。你可以在&#34;翻译&#34;中加入一个断点。功能
答案 4 :(得分:0)
我有同样的问题。我在this link under another similar question中详细解释了它。
简而言之,我的问题已通过使用以下代码重新加载服务器来解决:
sudo /etc/init.d/uwsgi reload
现在,每次我更改短语和编译语言文件后,我都会重新加载服务器以查看更改。 我希望这能解决一些问题。