2013-10-15 96 views
2

我在django國際化(i18n)中遇到問題。翻譯不起作用。 我的Django的版本是:1.5.4 這是我的代碼:django i18n不工作

settings.py

ugettext = lambda s:s 
LANGUAGES = [ 
    ('en','English'), 
    ('fa','Farsi'), 
] 

LANGUAGE_CODE = 'en_us' 
USE_I18N = True 
USE_L10N = True 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_PATH,'templates'), 
) 

urls.py

from django.conf.urls import patterns, include, url 
from main import * 
urlpatterns = patterns('', 
    url(r'$^',index), 
) 

main.py

from django.shortcuts import render 
from django.utils.translation import ugettext_lazy as _ 
def index(request): 
    alert = _('this is my page') 
    return render(request,'index.html',{'alert':alert}) 

指數.html

{% load i18n %} 
{{alert}} 

然後:

$mkdir conf/locale -p 
$django-admin.py makemessages -l fa 
processing language fa 
$django-admin.py compilemessages 
processing file django.po in /home/mori/Desktop/salam/salam/locale/fa/LC_MESSAGES 

django.po

# SOME DESCRIPTIVE TITLE. 
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 
# This file is distributed under the same license as the PACKAGE package. 
# FIRST AUTHOR <[email protected]>, YEAR. 
# 
#, fuzzy 
msgid "" 
msgstr "" 
"Project-Id-Version: PACKAGE VERSION\n" 
"Report-Msgid-Bugs-To: \n" 
"POT-Creation-Date: 2013-10-15 13:12+0330\n" 
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 
"Last-Translator: FULL NAME <[email protected]>\n" 
"Language-Team: LANGUAGE <[email protected]>\n" 
"Language: \n" 
"MIME-Version: 1.0\n" 
"Content-Type: text/plain; charset=UTF-8\n" 
"Content-Transfer-Encoding: 8bit\n" 
"Plural-Forms: nplurals=1; plural=0;\n" 

#: main.py:4 
msgid "this is my page" 
msgstr "in safeye mane" 

我有 'django.middleware.locale.LocaleMiddleware' 中間件類和 'django.core.context_processors.i18n' TEMPLATE_COTEXT_PROCESSORS。

輸出

this is my page 

我怎樣才能解決呢?

回答

2

要使用國際化:

  1. 定義您的網站支持的語言。
  2. 用於翻譯的標記字符串。
  3. 創建語言文件。
  4. settings.py中設置中間件。
  5. 設置請求的默認語言。

您需要set the language for the request,否則django將默認爲來自瀏覽器的語言請求,您的情況是英語。

您還需要修復您的模板,它應該是:

{% load i18n %} 
{% trans alert %} 

您認爲該_功能不僅標誌着你的字符串翻譯;它並不實際翻譯它。標記字符串進行翻譯可以使django將其導出到語言文件中,並且當用戶請求不同的語言時,django會查找它。

a few ways that django detects the preferred language(它會停在第一個地方,它會發現語言偏好)。它們被登記順序,這些方法是:在URL

  1. 語言前綴,例如/en/foo/bar/
  2. 在會話中的django_language關鍵。
  3. A django_language cookie。
  4. Accept-Language表頭。
  5. LANGUAGE_CODE設置。

在你的情況下,它捕捉#4,因爲你的瀏覽器正在發送它將接受的語言列表,並且第一個是英語。

有可以解決這幾個方面:

  1. 可以激活語言在您的視圖:activate('fa')
  2. 您可以強制在模板語言,與language模板標籤:

    {% load i18n %} 
    {% language 'fa' %} 
    {% trans alert %} 
    
  3. 您可以使用url internationalization功能,並將其與set_language重定向視圖配對,以正確設置語言並使您國際化r網址。
+4

非常感謝。我的問題是LOCALE_PATHS,我沒有在settings.py中聲明。 – Mortezaipo