3

我在 django 国际化(i18n)中有问题。翻译不起作用。我的 django 版本是:1.5.4 这是我的代码:

设置.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'),
)

网址.py

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

主文件

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@ADDRESS>, 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@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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”,在 TEMPLATE_COTEXT_PROCESSORS 中有“django.core.context_processors.i18n”。

输出

this is my page

我该如何解决?

4

2 回答 2

2

要使用国际化:

  1. 定义您的站点支持的语言。
  2. 标记要翻译的字符串。
  3. 创建语言文件。
  4. 中设置中间件settings.py
  5. 设置请求的默认语言。

您需要为请求设置语言,否则 django 将默认使用来自浏览器的语言请求,在您的情况下为英语。

您还需要修复您的模板,它应该是:

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

在您看来,该_功能仅将您的字符串标记为翻译;它实际上并没有翻译它。标记要翻译的字符串使 django 将其导出到语言文件中,并在用户请求不同语言时让 django 查找它。

django有几种检测首选语言的方法(它会在找到语言首选项的第一个位置停止)。这些方法按检查顺序是:

  1. URL 中的语言前缀,例如/en/foo/bar/
  2. 会话中的一个django_language键。
  3. 一块django_language饼干。
  4. Accept-Language标题。
  5. LANGUAGE_CODE环境。

在您的情况下,它捕获了#4,因为您的浏览器正在发送它将接受的语言列表,第一个是英语。

有几种方法可以解决这个问题:

  1. 您可以在视图中激活语言:activate('fa')
  2. 您可以使用language模板标签在模板中强制使用一种语言:

    {% load i18n %}
    {% language 'fa' %}
    {% trans alert %}
    
  3. 您可以使用url 国际化功能,并将其与重定向视图配对set_language,以正确设置语言并国际化您的 URL。
于 2013-10-15T12:40:55.877 回答
0

只有一件事我忘了考虑我的settings.pyLOCALE_PATHS

于 2016-12-08T09:20:25.320 回答