鑒于眾多博客關(guān)于Django的國(guó)際化都不是前后端分離,在此制作一片關(guān)于前后端分離的國(guó)際化文章,博文經(jīng)供參考:
一:Django后臺(tái):
基本步驟:
- 一些必要的配置
- 在代碼中標(biāo)記需要翻譯的文本
- 使用 makemessages 命令生成 po 文件
- 編譯 compilemessages 命令編譯 mo 文件
1:配置:
在setting.py中進(jìn)行國(guó)際化中間插入典鸡,language語(yǔ)言包文件路徑
在setting.py文件中MIDDLEWARE=[]
中添加
'django.middleware.locale.LocaleMiddleware',
LocaleMiddleware 可以決定使用何種語(yǔ)言猖闪。具體來(lái)說(shuō)胧洒,LocaleMiddleware
是按照下面的順序(優(yōu)先級(jí)遞減):
- i18n_patterns
- request.session[settings.LANGUAGE_SESSION_KEY]
- request.COOKIES[settings.LANGUAGE_COOKIE_NAME]
- request.META['HTTP_ACCEPT_LANGUAGE'],即 HTTP 請(qǐng)求中的 Accept-Language header
- settings.LANGUAGE_CODE
如下:
# 中間件
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# 'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
# 'users.middleware.InterfacePermission',
'django.middleware.locale.LocaleMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
在setting.py里添加language語(yǔ)言包文件路徑滚婉,如下:
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# 國(guó)際化語(yǔ)言包
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'language'),
)
LANGUAGES = (
('en', 'English'),
('zh', '中文'),
)
注意:如果你是中文轉(zhuǎn)英文則需要把LANGUAGE_CODE = 'en-us'
改成LANGUAGE_CODE = 'zh-hans'
,反之
2:標(biāo)記需要翻譯的文本
- 引用包
from django.utils.translation import gettext as _
- 在需要使用翻譯的地方使用:
_("*****")
(我這里使用中文轉(zhuǎn)英文所以需要在setting.py中修改LANGUAGE_CODE)
class TestViewSet(ChenAllViewSet):
def create(self, request, *args, **kwargs):
return ReturnData(message=_("成功"))
def list(self, request, *args, **kwargs):
return ReturnData(message=_("失敗"))
3:使用 makemessages 命令生成 po 文件
在執(zhí)行這一步之前图筹,請(qǐng)先通過(guò) xgettext --version
確認(rèn)自己是否安裝了 GNU gettext。GNU gettext 是一個(gè)標(biāo)準(zhǔn) i18n L10n 庫(kù)让腹,Django 和很多其他語(yǔ)言和庫(kù)的多語(yǔ)言模塊都調(diào)用了 GNU gettext远剩,所以接下來(lái)講的一些 Django 特性實(shí)際上要?dú)w功于 GNU gettext。如果沒有安裝的話可以通過(guò)下面的方法安裝:
ubuntu:
$ apt update
$ apt install gettext
macOS:
$ brew install gettext
$ brew link --force gettext
windows
安裝完 GNU gettext 后骇窍,對(duì) Django 工程執(zhí)行下面的命令
$ python3 manage.py makemessages --local en
django.po
文件大致長(zhǎng)這個(gè)樣子
# 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: 2019-05-23 09:35+0000\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"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps/users/views.py:650
msgid "成功"
msgstr "success"
#: apps/users/views.py:653
msgid "失敗"
msgstr "failure"
4:編譯 compilemessages 命令編譯 mo 文件
修改好 django.po 文件后瓜晤,執(zhí)行下面的命令:
python3 manage.py compilemessages --local en
復(fù)制代碼Django 會(huì)調(diào)用程序,根據(jù) django.po 編譯出一個(gè)名為 django.mo 的二進(jìn)制文件像鸡,位置和 django.po 所在位置相同活鹰。這個(gè)文件才是程序執(zhí)行的時(shí)候會(huì)去讀取的文件。
用postman測(cè)試:
- 英文
Accept-Language:en
英文 - 中文
Accept-Language:zh
中文
二:vue前臺(tái):
1只估、安裝
npm install --save vue-i18n
2志群、引用 –為了方便后去優(yōu)化,單獨(dú)新建一個(gè)i18n.js文件
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
// Ready translated locale messages
const messages = {
zh: {
message: {
hello: '嗨蛔钙,世界',
}
},
en: {
message: {
hello: 'hello world',
}
},
ja: {
message: {
hello: 'こんにちは锌云、世界'
}
}
}
export default new VueI18n({
locale: 'ja', // set locale
messages, // set locale messages
})
3、調(diào)用–在main.js里面引入
import i18n from './i18n'
new Vue({
el: '#app',
template: '<App/>',
components: { App },
i18n
})
4吁脱、在vue文件里面的實(shí)現(xiàn)
<p>{{ $t("message.hello") }}</p>