Django L10N无法看到我的语言环境路径?

时间:2014-08-04 14:52:59

标签: python django localization

我知道有很多主题讲述同样的事情,但我无法找到任何一个解决方案。
我创建了一个新的django项目 这是我唯一的模板:

{% load i18n %}
[...]
<h1>{% trans "Please translate me" %}</h1>
<h1>{{ _("Please translate me") }}</h1>
<h1>{% blocktrans %}Please translate me{% endblocktrans %}</h1>
<p>{% trans "Password" %}</p>
<p>{{ _("Password") }}</p>
<p>{% blocktrans %}Password{% endblocktrans %}</p>
<h1>{% get_current_language as lang %}{{lang}}</h1>
<p>LOCALE_PATHS = {{ s }}</p>
[...]

正如你所看到的,我正在尝试三种不同的翻译方法:trans和blocktrans标签,甚至_(&#34; string&#34;)调用。 这些行是用于改变语言的小形式下面的行。不需要在这里复制它,你会发现它工作得很好。

以下是调用模板的视图:

def welcome(request):
    from djp import settings
    s=settings.LOCALE_PATHS
    return render(request, 'welcome.html', locals())

我的设置:

LANGUAGE_CODE = 'en_us' # EDIT
USE_I18N = True
USE_L10N = True

gettext = lambda x: x
LANGUAGES = (
    ('en_us', gettext('English')),
    ('fr_fr', gettext('French')),
    ('de_de', gettext('German')),

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'), 
)

我还有 django.core.context_processors.i18n django.middleware.locale.LocaleMiddleware 行,我添加了 url(r&# 39; ^ i18n /&#39;,在urlpatterns中包含(&#39; django.conf.urls.i18n&#39;))行。

现在,在 ./ manage.py makemessages -l fr_fr 之后,我打开django.po文件,删除所有#,模糊行并翻译所有字符串,除了&#39;密码&#39 ;,Django自动翻译:

[...]
#: templates/welcome.html:30 templates/welcome.html.py:31
#: templates/welcome.html:32
msgid "Please translate me"
msgstr "S'il-te-plaît traduis moi"

#: templates/welcome.html:33 templates/welcome.html.py:34
#: templates/welcome.html:35
msgid "Password"
msgstr ""

然后我运行 ./ manage.py compilemessages ,获取django.mo文件,然后运行服务器。
现在这就是我用英语写的:

Please translate me
Please translate me
Please translate me

Password
Password
Password

en-us
LOCALE_PATHS = ('/media/pawantu/Data/Projets/VirtualEnvs/loc/djp/locale',)

法语:

Please translate me
Please translate me
Please translate me

Mot de passe
Mot de passe
Mot de passe

fr-fr
LOCALE_PATHS = ('/media/pawantu/Data/Projets/VirtualEnvs/loc/djp/locale',)

用德语:

Please translate me
Please translate me
Please translate me

Passwort
Passwort
Passwort

de-de
LOCALE_PATHS = ('/media/pawantu/Data/Projets/VirtualEnvs/loc/djp/locale',)

所以,正如你所看到的那样,“密码”这个词很容易。正确翻译(由Django我猜),这意味着标签工作(trans,blocktrans和_(&#34;&#34;)),语言正确更改。
但我的翻译并没有显示出来。我试图清理浏览器的缓存,它没有修复它 您认为这里的问题是什么?即使设置了LOCALE_PATHS元组,Django也无法找到我的语言环境目录吗?

Django版本:1.6.5

2 个答案:

答案 0 :(得分:0)

首先,LANGUAGE_CODE保存您的默认安装语言: https://docs.djangoproject.com/en/1.6/ref/settings/#language-code

所以它应该指向一种语言,而不是你的语言列表:

LANGUAGE_CODE = 'en_us'

然后(你不会在你的urls.py中粘贴你的网址我只是要粘贴一个样本):

urlpatterns = i18n_patterns('',
    ...
    yourapppurls are here
    ...
)

答案 1 :(得分:0)

我们可以阅读https://docs.djangoproject.com/en/1.3/topics/i18n/deployment/

  

LocaleMiddleware只能选择有的语言   Django提供的基本翻译。如果您想提供翻译   对于尚未包含在翻译集中的应用程序   Django的源代码树,你至少要提供一个基本树   在Locale限制说明中描述。

这就解释了为什么我的翻译没有被使用。 但是:

  

如果基本语言可用但指定的子语言不可用,   Django使用基本语言。例如,如果用户指定de-at   (奥地利德语)但Django只有de,Django使用de。

...解释为什么“密码”一词仍然被翻译! 知道了这一点,我将语言改为

LANGUAGES = (
    ('en', gettext('English')),
    ('fr', gettext('French')),
    ('de', gettext('German')),
)

...并调整我的locale子目录名称以匹配它 可以通过列出 django / conf / locale 目录(如果使用virtualenv在site-packages目录中)找到Django支持的语言列表。