Django1.9開發博客(12)- i18n國際化


國際化與本地化的目的為了能為各個不同的用戶以他們最熟悉的語言和格式來顯示網頁。

Django能完美支持文本翻譯、日期時間和數字的格式化、時區。

另外,Django還有兩點優勢:

  1. 允許開發者和模板作者指定他們哪些app應該被翻譯或被格式化為本地形式。
  2. 允許用戶根據自己的偏好來實現本地化顯示。翻譯依據語言,格式化依據國家, 這些信息由瀏覽器中的Accept-Language頭來決定。不過目前為止時區還未能實現。

參考官方文檔:https://docs.djangoproject.com/en/1.9/topics/i18n/

配置

實際上django的國際化做的非常好了,配置很簡單。

settings.py

首先在settings中,添加如下內容:

1
2
3
4
5
6
7
8
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
('zh-cn', _('Simplified Chinese')),
('en', _('English')),
)
LOCALE_PATHS = (
os.path.join(BASE_DIR, "locale"),
)

 

通過LANGUAGES執行語言列表,LOCALE_PATHS指定國際化目錄。

在項目根目錄下面創建一個locale文件夾,然后使用命令創建國際化文件:

django-admin.py makemessages -l zh_CN

 

執行完后,locale文件夾下面創建zh_CN/LC_MESSAGES/django.po,里面的內容類似下面:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-11-26 11:45+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: .\mysite\settings.py:94
msgid "Simplified Chinese"
msgstr "簡體中文"

#: .\mysite\settings.py:95
msgid "English"
msgstr "English"

#: base.html
msgid "Simple Blog"
msgstr "極簡博客"

msgid "Hello"
msgstr "歡迎你"

msgid "previous"
msgstr "上一頁"

msgid "next"
msgstr "下一頁"

將你頁面上面需要翻譯的內容寫到這里面來即可。比如previous要翻譯成上一頁

寫好了所有的翻譯后,再執行:

django-admin.py compilemessages

 

這時候會生成文件zh_CN/LC_MESSAGES/django.mo,這個是最終的目標文件了。

使用

我們用base.html來做演示,打開mysite/templates/mysite/base.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{% load staticfiles %}
{% load i18n %}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>{% trans 'Simple Blog'%}</title>
</head>
<body class="customize-support">
<div class="page-header">
{% if user.is_authenticated %}
<a href="{% url 'post_new' %}" class="top-menu"><span
class="glyphicon glyphicon-plus"></span></a>
<a href="{% url 'post_draft_list' %}" class="top-menu"><span
class="glyphicon glyphicon-edit"></span></a>
<p class="top-menu" style="font-size: 15pt;">{% trans 'Hello'%} {{ user.username }}
<small>&nbsp;</small>
<a href="{% url 'django.contrib.auth.views.logout' %}" class="top-menu">
<span class="glyphicon glyphicon-log-out"></span></a>
</p>
{% else %}
<a href="{% url 'django.contrib.auth.views.login' %}" class="top-menu">
<span class="glyphicon glyphicon-log-in"></span></a>
{% endif %}
<h1><a href="{% url 'blog.views.post_list' %}">{% trans 'Simple Blog'%}</a></h1>
</div>
...
</body>
</html>

注意

<title>{% trans 'Simple Blog'%}</title>

 

這句,如果用戶選擇中文,那么就會被翻譯成極簡博客。這個在django.po文件中定義過。其他的內容也是類似,就不多說了。

好了,i18n國際化就是這么簡單。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM