我在应用程序国际化方面遇到了困难,所以我在这里提供了一个我的实现失败的最小例子.
考虑以下步骤,在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
Run Code Online (Sandbox Code Playgroud)
哪里:
## (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"
Run Code Online (Sandbox Code Playgroud)
我假设网站只有一种语言,因此,我没有通过django文档激活中间件语言环境:
如果您想让每个用户指定他或她喜欢的语言,请使用LocaleMiddleware.LocaleMiddleware可根据请求中的数据进行语言选择.它为每个用户定制内容.
此实现不会将"Hello"转换为"Hallo".我究竟做错了什么?
Gre*_*ory 24
1º在settings.py中启用国际化:
USE_I18N = True
Run Code Online (Sandbox Code Playgroud)
2º开启设置,导入:
from django.utils.translation import ugettext_lazy as _
3º在settings.py中设置要使用的语言:
LANGUAGES = (
('en', _('English')),
('pt-br', _('Portuguese')),
('it', _('Italian')),
('fr', _('French')),
('es', _('Spanish')),
)
Run Code Online (Sandbox Code Playgroud)
3º在settings.py中配置LOCALE_PATH:
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'conf/locale'),
)
Run Code Online (Sandbox Code Playgroud)
4º在LOCALE_PATH中配置的路径内创建文件夹,例如:
$ cd django_project_folder
$ mkdir conf
$ mkdir conf/locale
Run Code Online (Sandbox Code Playgroud)
5º运行命令:
django-admin.py makemessages -a
Run Code Online (Sandbox Code Playgroud)
它将在settings.py LANGUAGES中设置的每种语言的子文件夹中创建一个文件.po.在文件中创建每个句子的翻译.
Ps:遍历当前目录的整个源树,并拉出所有标记为翻译的字符串.
对于测试,在运行之前,放置标签
{% trans "Welcome to my project!" %}
Run Code Online (Sandbox Code Playgroud)
在index.html中,再次运行命令makemessages.您将在de .po文件中看到一个新字符串:
msgid "Welcome to my Project"
msgstr ""
Run Code Online (Sandbox Code Playgroud)
6º现在,运行命令:
django-admin compilemessages
Run Code Online (Sandbox Code Playgroud)
它将从.po文件中收集所有msgstr,并将在.mo文件中进行编译
7º运行项目并进行测试
8ªPlus:如果您希望在URL中显示用户使用的语言,您可以配置url.py以显示:
urlpatterns += i18n_patterns(
# your urls here,
)
Run Code Online (Sandbox Code Playgroud)
and*_*.ge 10
Django以这三种方式收集翻译:https : //docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations
LOCALE_PATHS中列出的目录具有最高优先级,首先出现的目录优先级高于稍后出现的目录.
然后,它会查找并使用它是否存在于INSTALLED_APPS中列出的每个已安装应用程序中的语言环境目录.首先出现的优先级高于后来出现的优先级.
最后,在Django/CONF /区域设置Django的提供的基平移用作回退.
由于您的翻译文件不在这些地方,您需要使用LOCALE_PATHS
此处说明手动设置它:https://docs.djangoproject.com/en/dev/ref/settings/#std :
setting-LOCALE_PATHS
归档时间: |
|
查看次数: |
13214 次 |
最近记录: |