Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django国际化最小示例_Django - Fatal编程技术网

Django国际化最小示例

Django国际化最小示例,django,Django,我在国际化我的应用程序方面遇到了困难,所以我在这里给出了一个实现失败的最小示例 考虑以下步骤,在django制作一个有国际支持的网站: 转到终端中您最喜爱的文件夹,然后: django-admin.py startproject mysite cd mysite/ mkdir locale python manage.py startapp main # (1) modify mysite/urls.py # (2) modify main/views.py # (3) modify mysit

我在国际化我的应用程序方面遇到了困难,所以我在这里给出了一个实现失败的最小示例

考虑以下步骤,在django制作一个有国际支持的网站:

转到终端中您最喜爱的文件夹,然后:

django-admin.py startproject mysite
cd mysite/
mkdir locale
python manage.py startapp main
# (1) modify mysite/urls.py
# (2) modify main/views.py
# (3) modify mysite/settings.py
django-admin.py makemessages -l de
# (4) modify locale/de/LC_MESSAGES/django.po
django-admin.py compilemessages -l de
python manage.py runserver
其中:

## (1) mysite/urls.py
urlpatterns = patterns('',
url(r'^$', 'main.views.home'),
)

## (2) main/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _

def home(request):
    return HttpResponse(_('Hello'))

## (3) mysite/settings.py
LANGUAGE_CODE = 'de'

from django.conf import global_settings
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + \
     ('django.core.context_processors.i18n',) # ensures all django processors are used.

## (4) locale/de/LC_MESSAGES/django.po
#: main/views.py:6
msgid "Hello"
msgstr "Hallo"
我假设网站只有一种语言,因此,我没有通过以下方式激活中间件区域设置:

如果您想让每个单独的用户指定他使用的语言或 她更喜欢使用localemidware。LocalEMIDlware启用语言 根据请求中的数据进行选择。它为用户定制内容 每个用户


此实现不会生成所需的“Hello”到“Hallo”的翻译。我做错了什么?

Django以以下三种方式收集翻译:

LOCALE_路径中列出的目录具有最高的优先级,最先出现的目录的优先级高于随后出现的目录

然后,它查找并使用installed_apps中列出的每个已安装应用中是否存在区域设置目录。先出现的优先权高于后出现的优先权

最后,使用Django提供的Django/conf/locale中的基本翻译作为回退

由于您的翻译文件不在这些位置,您需要使用
LOCALE\u路径手动设置它,如下所述:

1º在settings.py中启用国际化:

USE_I18N = True
2º在设置上,导入:

从django.utils.translation导入ugettext\u lazy as

3º设置要在settings.py中使用的语言:

LANGUAGES = (
    ('en', _('English')),
    ('pt-br', _('Portuguese')),
    ('it', _('Italian')),
    ('fr', _('French')),
    ('es', _('Spanish')),
)
3º在settings.py中配置LOCALE_路径:

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'conf/locale'),
)
4º在您在区域设置中配置的路径内创建文件夹,例如:

$ cd django_project_folder
$ mkdir conf
$ mkdir conf/locale
5º运行命令:

django-admin.py makemessages -a
它将在settings.py LANGUAGES中每个语言集的子文件夹中创建一个.po文件。翻译文件中的每个句子

Ps:在当前目录的整个源代码树上运行,并提取所有标记为转换的字符串

对于测试,在运行之前,放置标签

{% trans "Welcome to my project!" %} 
在index.html中,再次运行makemessages命令。您将在de.po文件中看到一个新字符串:

msgid "Welcome to my Project"
msgstr ""
6º现在,运行命令:

django-admin compilemessages
它将从.po文件收集所有msgstr,并将编译为.mo文件

7º运行项目并进行测试

8ªPlus:如果您希望在URL中显示用户使用的语言,您可以配置URL.py以显示:

urlpatterns += i18n_patterns(
    # your urls here,
)

如果您访问Django管理面板,是否使用德语?您是否尝试设置
LOCALE\u路径
@andrea.ge:根据我从django文档中了解到的情况,这些应该是翻译的最小步骤。。。我尝试了本地路径,但没有成功,我没有尝试admin,因为它需要一个DB,我没有使用它…您将
LOCALE\u路径设置为哪个路径?
?LOCALE\u路径=('/Users/username/Desktop/Trials/test django/mysite/LOCALE'),这是makemessages的内容所指向的路径。a=('something')=>type(a)=第一次也是在上面浪费时间:)这是我修复它的原因:在settings.py add LOCALE_PATHS=(“/mysite/LOCALE”),在url.py中添加url模式后,它开始显示页面未找到错误。我也遇到同样的问题。我打开