W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
可以通過(guò) http.lang
方法從 cookie 或者 header 里獲取當(dāng)前用戶的語(yǔ)言。如:
let lang = http.lang();
如果要支持從 cookie 里獲取用戶選擇的語(yǔ)言,那么需要設(shè)置語(yǔ)言在 cookie 里的名稱(chēng)??梢栽谂渲梦募?code>src/common/config/locale.js 里修改,如:
export default {
cookie_name: "think_locale", //存放語(yǔ)言的 cookie 名稱(chēng)
default: "en" //默認(rèn)語(yǔ)言
};
在 Controller 里可以直接通過(guò) this.lang
方法獲取對(duì)應(yīng)的語(yǔ)言。
有些情況下,語(yǔ)言是要從 URL 中解析。比如:當(dāng)前頁(yè)面的地址是 https://www.thinkjs.org/zh-CN/doc/2.0/i18n.html
,就包含了語(yǔ)言 zh-CN
。
這種情況下需要在項(xiàng)目里通過(guò) middleware 來(lái)解析其中的語(yǔ)言,如:
think.middleware("get_lang", http => {
let supportLangs = think.config("locale.support");
let lang = http.pathname.split("/")[0]; //從 URL 中獲取語(yǔ)言
if(supportLangs.indexOf(lang) > -1){
http.pathname = http.pathname.substr(lang.length + 1);
}else{
lang = http.lang(); //從 cookie 或者 header 中獲取語(yǔ)言
if(supportLangs.indexOf(lang) === -1){
lang = http.config("locale.default"); //默認(rèn)支持的語(yǔ)言
}
}
http.lang(lang, true); //設(shè)置語(yǔ)言,并設(shè)置模版路徑中添加語(yǔ)言目錄
});
從 URL 中解析到語(yǔ)言后,通過(guò) http.lang
方法設(shè)置語(yǔ)言,后續(xù)在 Controller 里可以直接通過(guò) http.lang
來(lái)獲取語(yǔ)言了。
定義 middleware get_lang
后,添加到對(duì)應(yīng)的 hook 里。如:
export default {
route_parse: ["prepend", "get_lang"], //將 get_lang 前置添加到 route_parse hook 里
}
支持國(guó)際化的項(xiàng)目需要配置變量在不同語(yǔ)言下的值,配置文件在 src/common/config/locale/[lang].js
,配置格式如下:
// src/common/config/locale/zh-CN.js
export default {
"title-home": "ThinkJS官網(wǎng) - A Node.js MVC Framework Support All Of ES6/7 Features",
"title-changelog": "更新日志 - ThinkJS官網(wǎng)",
}
// src/common/config/locale/en.js
export default {
"title-home": "ThinkJS - A Node.js MVC Framework Support All Of ES6/7 Features",
"title-changelog": "Changelog - ThinkJS"
}
配置語(yǔ)言變量后,可以通過(guò) http.locale
方法來(lái)獲取當(dāng)前語(yǔ)言對(duì)應(yīng)的變量值。如:
let homeTitle = http.locale("title-home");
如果在 Controller 中,可以直接通過(guò) this.locale
方法來(lái)獲取,如:
export default class extends think.controller.base {
indexAction(){
let homeTitle = this.locale("title-home");
}
}
模版里可以通過(guò) _
函數(shù)來(lái)獲取對(duì)應(yīng)的語(yǔ)言值。下面以 ejs
模版引擎為例:
<%- _("title-home") %>
有些項(xiàng)目中,需要根據(jù)不同的語(yǔ)言定制不同的模版,這時(shí)模版路徑里加一層語(yǔ)言目錄來(lái)處理就比較合適了。如:view/zh-CN/home/index_index.html
,路徑中添加了一層 zh-CN
語(yǔ)言目錄。
可以通過(guò) http.lang
方法設(shè)置語(yǔ)言并設(shè)置在模版路徑里添加一層語(yǔ)言目錄。如:
http.lang(lang, true); // true 表示在模版路徑里添加一層語(yǔ)言目錄
在 Controller 里可以通過(guò) this.lang
方法來(lái)設(shè)定。如:
export default class extends think.controller.base {
indexAction(){
let lang = getFromUrl();
this.lang(lang, true);
...
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: