2013-10-15 62 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