2012-08-24 106 views
3

我对Django很陌生,我正在使用i18n开展一个项目,事情是我翻译了一些变量在我的模板文件上使用.manage.py makemessages/compilemessages,但是当我使用{% trans "my string" %}时,我对所有语言都获得了相同的"my string"{%trans“字符串”%}不能在模板上工作,但是{%trans variable%}确实如此

我在做什么错?下面是该 views.py代码和 idioma.html


views.py:这里

#some代码...

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" %} 


应用程序转换来自于的.po区域/路径中的语变量和的.mo文件/到/语言/

不过,这并不翻译{%反式“卡罗”%}串。

发生了什么事?

感谢您的帮助!

回答

10

有你手动翻译了.po中的字符串?

makemessages只是增加了“卡罗”到的.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将不会在您的网页中翻译。

+0

非常感谢,它的工作现在:) –

1

看到

在某些情况下{% trans "your string " %}不起作用

,所以我会建议你使用blocktrans代替反式字符串

如何使用blocktrans

{% blocktrans %} your strnig {% endblocktrans %} 
+0

我试过了,但得到了同样的结果。 –

+0

你试过在这里粘贴 – user1614526

+0

{%blocktrans%}字符串{%endblocktrans%}还有{%trans“String”%} –

9

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

# settings.py 
LOCALE_PATHS = (
    '/path/to/your/project/locale', 
) 

阅读django's official documentation on LOCALE_PATHS以获取更多信息。

0

我曾经有过同样的问题。我在this link under another similar question中详细解释了它。

简单地说,我的问题已经解决了这个代码重新加载服务器:

sudo /etc/init.d/uwsgi reload 

现在,每次我改变短语和汇编语言文件后,我重新加载服务器太看到的变化。 我希望这能解决一些人的问题。

1

我整晚跟踪了代码,发现了一些线索。主要在trans_real.py和gettext.py中。你可以在“翻译”功能中放置一个断点。

  1. 翻译代码只在应用程序启动时执行一次。所以你 需要重新加载uwsgi来加载新版本。
  2. Po文件从不使用。 gettext.py仅使用“mo”文件(在我的笔记本电脑中)。 所以你必须在改变后编译消息。
  3. 语言代码中的“ - ”将在区域 路径中转换为“_”。例如“zh-CN”将被转换为“zh_CN”。这就是为什么 翻译文件无法找到。我认为如果 只使用两个字符作为语言代码会更好。而且在Linux系统中应该考虑敏感的情况下 。
+0

对我来说这是en_ca vs en-ca –

相关问题