所以这是您问题的详细版本。在 Django 1.4 到 1.7.1 上测试:
在 settings.py 中……
添加到MIDDLEWARE_CLASSES,语言环境,它可以根据请求启用语言选择:
'django.middleware.locale.LocaleMiddleware',
添加LOCALE_PATHS,您的翻译文件将存储在此处:
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
启用 i18N
USE_I18N = True
设置LANGUAGES,您将把网站翻译成:
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('pl', ugettext('Polish')),
)
添加 i18n 模板上下文处理器,请求现在将包括 LANGUAGES 和 LANGUAGE_CODE:
对于 Django
TEMPLATE_CONTEXT_PROCESSORS = (
....
'django.core.context_processors.i18n', # this one
)
对于 Django >= 1.8 把它放在这里:
TEMPLATES = [
{
'OPTIONS':
{'context_processors': [
'django.template.context_processors.i18n', # this one
]}
}
]
嵌套,在 urls.py 中:
在 url_patterns 中,添加以下内容,将启用设置语言重定向视图:
url(r'^i18n/', include('django.conf.urls.i18n')),
有关更多信息,请参阅 Translations 中的杂项。
添加以下导入,并用 i18n_patterns 封装要翻译的 url。这是我的样子:
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^i18n/', include('django.conf.urls.i18n')),
)
urlpatterns += i18n_patterns('',
(_(r'^dual-lang/'), include('duallang.urls')),
(r'^', include('home.urls')),
)
注意:您也可以将管理员网址放入 i18n_patterns。
用lazytext包裹你的文字!导入lazytext(如上)并用它包装每个字符串,像这样_('text'),你甚至可以去你的其他urls.py文件并像这样进行url翻译:
url(_(r'^dual_language/$'), landing, name='duallang_landing'),
您可以将要翻译的文本包装在其他文件中,例如 models.py、views.py 等。这是一个示例模型字段,其中包含 label 和 help_text 的翻译:
name = models.CharField(_('name'), max_length=255, unique=True, help_text=_("Name of the FAQ Topic"))
Django 翻译文档非常适合这个!
在您的 html 模板中...
现在您可以进入您的模板并加载 i18n 模板标签,并对您要翻译的静态内容使用 trans 和 transblock。这是一个例子:
{% load i18n %}
{% trans "This is a translation" %}<br><br>
{% blocktrans with book_t='book title'|title author_t='an author'|title %}
This is {{ book_t }} by {{ author_t }}. Block trans is powerful!
{% endblocktrans %}
现在为您的每个语言环境运行一个 makemessages:
./manage.py makemessages -l pl
现在剩下的就是进入您的 /locales 文件夹,并编辑每个 .po 文件。填写每个 msgstr 的数据。这是一个这样的例子:
msgid "English"
msgstr "Angielski"
最后编译消息:
./manage.py compilemessages
翻译还有很多东西要学,internationalization 与这个主题密切相关,所以也请查看文档。我还建议查看一些可用于 Django 的国际化包,例如 django-rosetta 和 django-linguo。它们帮助翻译模型内容,django-rosetta 不会在您的数据库中为此创建新条目,而 django-linguo 会。
我还创建了一个django translation demo,供有兴趣查看完整工作解决方案的人使用。
如果你遵循这个,你应该有一个好的开始。我相信这是让您的网站以多种语言运行的最标准化方式。干杯!