如何以正确的方式设置Django翻译? [英] How to setup up Django translation in the correct way?

查看:120
本文介绍了如何以正确的方式设置Django翻译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,翻译不工作在Django 1.6!我已经添加到我的settings.py

  LANGUAGE_CODE ='en-us'
ugettext = lambda s:s
LANGUAGES =(
('en',ugettext('English')),
('de',ugettext('German')),

还添加了中间件:

  MIDDLEWARE_CLASSES =(
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware'
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',

以及我的* .py文件每当我使用一个字符串,应该是l10nd:

 从django.utils.translation import ugettext_lazy as _ 

我的模板从

  {%extendsbase.html%} 
{%load i18n%}

和模板内部比我使用的反占位符。例如。

 < h1> {%trans注册坦克%}< / h1> 

事实上,当运行时,字符串出现在locale / de / LC_MESSAGES / django.po中翻译过来例如。

  msgid注册一个坦克
msgstrEinen neuen Tank anmelden

我的浏览器首先要求德语内容:
浏览器设置



我错过了什么?



PS我目前正在模糊的项目由github托管: https://github.com/frlan/blankspot

解决方案

LOCALE_PATHS 添加到设置.py 并将其设置为:



请注意, LOCALE_PATHS 必须是元组(查看路径末尾的逗号)

  import os 
BASE_DIR = os.path.dirname os.path.dirname(__ file__))

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

现在根据 LOCALE_PATHS locale 文件夹应该在您的项目的根目录。



并确保您运行 django-admin.py makemessages -l de django-admin.py compilemessages cmds从项目的根目录。

  djPrj 
|
+ ---> djPrj
|
+ ---> djApp
|
+ ---> locale
|
+ --->模板

还将您的 MIDDLEWARE_CLASSES 重新排列为 LocaleMiddleware 在 SessionMiddleware 之前和 CommonMiddleware 之前提到 here

  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',
'django.middleware.clickjacking.XFrameOptionsMiddleware',

重新启动服务( python manage.py runserver ),然后再次检查。 / p>




只是为了确保您的本地化应用于您的django管理页面,默认为 django.mo django文件,请执行以下测试:



首先在项目的主要 urls.py 模式替换为 i18n_patterns

 code> from django.conf.urls.i18n import i18n_patterns 

urlpatterns = i18n_patterns('',
url(r'^ admin /',include(admin.site.urls )),
#...

现在转到 Admin 页面与 de 前缀,如: http://127.0.0.1:8000/de/ admin /
Admin 页面应该显示在德语语言中。 / p>

好的,你可以在 de Admin $ c>语言?



还要检查您的视图,还有 de 前缀。






根据您的代码项目,一些句子不在trans块中。将它们作为:

  {%trans你的句子%} 
pre>

此外,您必须在视图和模型的代码中使用 ugettext_lazy 而不是ugettext(阅读 此处



替换为:

 从django.utils.translation import ugettext为_ 

with:

  from django.utils.translation import ugettext_lazy as _ 

现在一切都会工作。 / p>

I've got an issue with translations not working on Django 1.6!. I've added to my settings.py

LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
    ('en', ugettext('English')),
    ('de', ugettext('German')),
)

Also added middlewares:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

as well as to my *.py files whenever I'm using a string which shall be l10nd:

from django.utils.translation import ugettext_lazy as _

My templates starting with

{% extends "base.html" %}
{% load i18n %}

and inside the template than I used the trans placeholder. E.g.

<h1>{% trans "Register a tank" %}</h1>

In fact the string is appearing inside locale/de/LC_MESSAGES/django.po when running as well I have translated them. E.g.

msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"

My browser is set to request German content first: Browser settings

What did I miss?

P.S. The project I'm currently fuzzying around is hosted on github: https://github.com/frlan/blankspot

解决方案

Add the LOCALE_PATHS to settings.py and set it as bellow:

Note that LOCALE_PATHS must be a tuple(look at the comma at the end of the path)

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

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

Now based on LOCALE_PATHS, The locale folder should be in root of your project.

And be sure that you run django-admin.py makemessages -l de and django-admin.py compilemessages cmds from the root of your project.

djPrj
  |
  +---> djPrj
  |
  +---> djApp
  |
  +---> locale
  |
  +---> templates

Also rearrange your MIDDLEWARE_CLASSES to be LocaleMiddleware after SessionMiddleware and before CommonMiddleware that mentioned here:

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',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

Restart your service(python manage.py runserver) and check again.


Just to ensure that your localization is applied to your django admin page with default django.mo file of django, do following test:

First in main urls.py of project replace patterns with i18n_patterns:

from django.conf.urls.i18n import i18n_patterns

urlpatterns = i18n_patterns('',
    url(r'^admin/', include(admin.site.urls)),
    # ...
)

Now go to Admin page with de prefix, like: http://127.0.0.1:8000/de/admin/ And Admin page should be show in German language.

Ok, are you able to see Admin page of django in de language ?

Also check your view with de prefix too.


According to your code of project, some sentences are not in trans block. put them as:

{% trans "your sentence" %}

Also you must use ugettext_lazy instead of ugettext in your code for views and models, (read here)

replace this:

from django.utils.translation import ugettext as _ 

with:

from django.utils.translation import ugettext_lazy as _

And now everything will work.

这篇关于如何以正确的方式设置Django翻译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆