如何以正确的方式设置Django翻译?

编程入门 行业动态 更新时间:2024-10-27 15:19:01
本文介绍了如何以正确的方式设置Django翻译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

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

还添加了中间件:

MIDDLEWARE_CLASSES =('django.middlewaremon.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托管: github/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.middlewaremon.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 前缀,如: 127.0.0.1:8000/de/ admin / 和 Admin 页面应该显示在德语语言中。 / p>

好的,你可以在 de 语言?

还要检查您的视图,还有 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.middlewaremon.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: github/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.middlewaremon.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: 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翻译?

本文发布于:2023-05-23 14:45:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1326163.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:正确   方式   Django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!