{%trans"string"%}不在模板上工作,但{%trans变量%}没有

Ale*_*nez 8 django django-templates internationalization

我是Django的新手,我正在开发一个i18n项目,事情是我 .manage.py makemessages / compilemessages 在我的模板文件中使用了一些变量,但是当我使用时,我对所有语言 {% trans "my string" %} 都有相同"my string"的变化.

我究竟做错了什么?这是views.pyidioma.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) )
Run Code Online (Sandbox Code Playgroud)


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" %}
Run Code Online (Sandbox Code Playgroud)


应用程序将idioma变量从locale/path /中的.po和.mo文件转换为/ language /

但它没有翻译{%trans"carro"%}字符串.

这是怎么回事?

谢谢你的帮助!!!!

dol*_*a33 17

您是否手动翻译了.po中的字符串?

makemessages 只需将"carro"添加到.po,在.po文件中生成类似的内容

#: idioma.html:45
msgid "carro"
msgstr ""
Run Code Online (Sandbox Code Playgroud)

然后你必须编辑.po 手动添加该字符串的翻译,这样:

#: idioma.html:45
msgid "carro"
msgstr "car"
Run Code Online (Sandbox Code Playgroud)

然后,当您完成翻译所有.po字符串后,您可以运行compilemessages:它将编译您的翻译.

注意:永远记得寻找,fuzzy翻译.如果你的.po中有这样的东西

#: idioma.html:45
#, fuzzy
msgid "carro"
msgstr "car"
Run Code Online (Sandbox Code Playgroud)

这意味着django由于某种原因试图自己翻译字符串(通常在您已经在一段不再使用的代码中使用该字符串时发生).

您必须查看翻译并删除该#, fuzzy行:任何标记的翻译#, fuzzy都不会在您的网页中翻译.

  • 模糊提示节省了我的时间. (4认同)

res*_*ate 11

我遇到了类似的问题,并能够通过设置LOCALE_PATHS我的设置文件来解决它.LOCALE_PATHS是一个目录路径的元组,其中django查找.mo和.po文件.这是一个例子:

# settings.py
LOCALE_PATHS = (
    '/path/to/your/project/locale',
)
Run Code Online (Sandbox Code Playgroud)

有关LOCALE_PATHS更多信息,请阅读django的官方文档.