2012-10-10 110 views
9

好吧,我一直在爲這個瘋狂尋找我認爲簡單的問題。django翻譯模板{%trans「something」%}

我使用Django 1.4

的問題是,Django會不會在我的模板轉換一個簡單的{%的反式「工作」%}。

這是我做了什麼:

Settings.py:

LANGUAGE_CODE = 'en-us' 
USE_I18N = True 
MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    # Uncomment the next line for simple clickjacking protection: 
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware', 
) 
TEMPLATE_CONTEXT_PROCESSORS = (
    "django.contrib.auth.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.core.context_processors.static", 
    "django.core.context_processors.request", 
) 

LOCALE_PATHS = (
    '/home/m00p/PycharmProjects/astrid/locale' 
) 

這是我的地圖結構:

/ 
myproject/ 
apps/ 
locale/ 
template/ 

於是我拼命地跑

django- admin.py makemessages -l nl -i settings.py

,並沒有成功地在區域設置文件夾中創建NL/LC_MESSAGES/django.po,然後我編輯翻譯它在django.po發現

#: templates/base.html:22 
msgid "work" 
msgstr "ddddddddddddd" 

我然後運行編譯命令

django-admin.py compilemessages

,它也成功地創造了正確的折django.mo文件呃

我說這也是在的myproject/urls.py

urlpatterns = patterns('', 
    url(r'^i18n/', include('django.conf.urls.i18n')), 
) 

urlpatterns += i18n_patterns('', 
    url(r'^$', 'front.views.home', name='home'), 
) 

我在base.html文件文件添加到了可以改變語言

<form action="/i18n/setlang/" method="post"> 
    {% csrf_token %} 
    <input name="next" type="hidden" value="/" /> 
    <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> 

所以,當我去到網址我得到127.0.0.1:8000/en/在url中,這是正確的,因爲englisch是默認語言,當我然後將其更改爲NL的形式,它重定向到127.0.0.1:8000/nl/但我翻譯的文本沒有改變。我也確定該語言是NL,因爲當我顯示{{LANGUAGE_CODE}}時,它表示NL。

有人知道它爲什麼不改變?

感謝m00p

問題解決了

期間,當我添加的東西我忘了,它的工作過程中,我重新啓動我的部署服務器,但我沒有清除緩存我瀏覽器它仍在使用舊頁面,所以當我在Chrome中清除瀏覽器數據並重新訪問該頁面並更改了正確翻譯的語言時。無論如何感謝您的建議!

+0

我也使用這種多語言的概念,我做了你所做的,但在我的django.po文件中,它不包含我可以編輯的模板文件行,例如因爲你的.po文件包含'#:templates/base.html:22 msgstr「work」'....但是它包含了site-packages/django中的所有文件**(i.ie,管理員部分)我不想編輯這些管理文件,但我編輯,以查看天氣翻譯是否工作,但它不適用於此管理部分太............... ....所以我的主要問題是如何顯示我的模板數據,我可以編輯 – Inforian

+1

我已經在我的模板中指定了'{%load i18n%} {%trans「Hello」%}' 以便.po文件選取它我可以在.po文件中添加翻譯的數據............但它仍然不會在.po文件中選擇這些模板..... ??? – Inforian

回答

5

在Django 1.4中,項目根目錄下的語言環境目錄不再受支持。您應該將其添加到默認情況下爲空的LOCALE_PATHS設置。 Django Settings

但是,涉及到locale生成的管理命令似乎有效,所以我不知道你是否已經做到了。

+0

我做到了,但沒有任何變化:( – m00p

12

我只花了幾個小時,試圖在Django 1.5來解決這個問題,在我的新項目Sportolio工作時,它原來我錯過了一個逗號在LOCALE_PATH

LOCALE_PATHS = (
    '/path/to/my/project/locale/', 
) 

末,這是非常至關重要,因爲Django預計LOCALE_PATHS不是字符串,而是TUPLE

我希望能拯救別人的生命:)

+2

+1有關逗號的解釋! –

0

我有同樣的情況。部分短語是翻譯,但大多數只是顯示了關鍵。我們有兩種主要語言en和fa。兩者都有同樣的問題。 我在網上回顧了所有相同的問題和每一個關於django翻譯的文檔。我可以說我嘗試了幾乎所有的東西。 唯一的區別是我們正在生產服務器上進行測試。 而我沒有重新加載服務器! 所以這個單行命令帶我去我的痛苦:

sudo /etc/init.d/uwsgi reload 

我在做什麼錯的是我重新開始,而不是uwsgi WSGI!

如果你喜歡做什麼我做了,那就是: 我做服務器的順序步驟:

django-admin makemessages -l en 
django-admin makemessages -l fa 

添加波斯的短語和一些英文文本進行測試。

django-admin compilemessages 
python manage.py clear_cache 
python manage.py runserver 

服務器運行時沒有錯誤。但是不存在en或fa的變化。看起來,Django正在從舊緩存加載。於是,我刪除了整個緩存,甚至從服務器中刪除了所有文件,並重新安裝了整個項目。然而同樣的問題。

我從我的筆記本電腦上的django發出的消息發送到服務器。 此外,我嘗試了不同的文本編輯器和翻譯工具,如 poedit生成po和mo文件。然而這個問題一直在顯示。

我使用和更換反式標籤,看它是否工作在其中任何一個:

{% trans ' ' %} 
{% trans " " %} 
{% blocktrans %} {% endblocktrans %} 
{% trans "xyz" az XYZ %} {{ XYZ }} 
{{ _() }} 

沒有一次成功!

但重新加載服務器把所有東西都按順序排列。 我希望這可能對某些人有幫助。