2012-08-24 71 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 –

相關問題