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 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"

我假设该网站只有一种语言,因此,我没有通过 django documentation 激活中间件语言环境。 :

If you want to let each individual user specify which language he or she prefers, use LocaleMiddleware. LocaleMiddleware enables language selection based on data from the request. It customizes content for each user.



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

最佳答案

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

USE_I18N = True

2º 在设置中,导入:
from django.utils.translation import ugettext_lazy as _
3º 在 settings.py 中设置您要使用的语言:
LANGUAGES = (
    ('en', _('English')),
    ('pt-br', _('Portuguese')),
    ('it', _('Italian')),
    ('fr', _('French')),
    ('es', _('Spanish')),
)

3º 在 settings.py 中也配置 LOCALE_PATH:
LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'conf/locale'),
)

4º 在您在 LOCALE_PATH 中配置的路径中创建文件夹,例如:
$ 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国际化最小例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16768809/

相关文章:

python - 使用 django 在 postgres ArrayField 上进行不区分大小写的搜索

python - 用于编辑模型的 Django 表单向导

Django:无法配置处理程序 'console'

python - Django OneToOne 字段 self

python - NotImplementedError : The gflags library must be installed to use tools. 运行()。请安装 gflags 或者最好切换到使用 tools.run_flow()

python - Django REST 框架 : Basic Auth without debug

python - 帮助python继承

python - 如何将值/参数从 HTML 传递到 Django View ?

django - 找不到标签为 XYZ 的应用

使用 postgres 的 Django 测试 - 重置序列