JeeSite 4.x 國際化(i18n)、多語言、本地化
1、支援登入時,指定語言,或登入後進行語言切換(param_lang=en)
2、支援 Cookie 儲存語言設定,沒有 Cookie 的情況使用 Session 儲存,支援移動端
3、支援 properties 檔案、資料庫儲存譯文,方便譯文資料進行管理。
4、可翻譯:固定資料(如:頁面標題、標籤、訊息提示)、動態資料(如:選單資料、字典資料等)
5、中文免寫 zh_CN 譯文,如:text(‘你好’),找不到對應 key 直接原樣輸出 “你好”
6、支援 kay 和譯文引數,如:text(‘今天第{0}天’, 3),輸出 “今天第3天”
語言檔案
後端語言檔案
固定資料語言
不會變化的文字翻譯,如:某個提示資訊,欄位 label,列表標題,按鈕文字等,這些譯文需要放到 properties 裡。
檔案目錄結構,支援模組化分類語言檔案結構,如下:
/src/main/resources/messages/模組編碼/i18n_語言編碼.properties
例如:msg 模組 en 譯文配置:
/src/main/resources/messages/msg/i18n_en.properties
檔案內容:
- 檔案內容採用 key=value 方式儲存,如:你好=Hello
- 若Key中包含空格,可使用“\”轉義,如:提\ 交=Submit
- 帶引數的譯文,如:今天第\ {0}\ 天。= Today is the {0} day.
在系統字典中維護新增加的語言:sys_lang_type,字典編碼為語言編碼;
動態資料語言
業務或管理員可通過資料庫進行修改或配置的一些文字譯文,如選單名稱,字典名稱,字典值等。
這些可通過 system 賬號登入,進入選單 “系統管理 -> 系統設定 -> 國際化管理” 新增譯文。
前端語言檔案
根據需求自己擴充套件語言檔案,例如:
<script src="${ctxStatic}/modules/i18n/i18n_${lang()}.js" ></script>
舉例內容如下:
window.jeesiteMessage = $.extend({}, window.jeesiteMessage, { '你好' : 'Hello', '今天第 {0} 天' : ' Today is the {0} day.' });
語言呼叫方法
Java
1、獲取語言名稱:Global.getLang()
返回:en、zh_CN
2、獲取語言編碼譯文:Global.getText(code)
例如:Global.getText("你好")
3、獲取語言編碼譯文,支援引數:Global.getText(code, params...)
例如:Global.getText("今天第{0}天", 3)
4、在整合 BaseController 和 BaseService 的類裡可直接通過
例如:text(code) 或 text(code, params...)
Beetl檢視
1、獲取語言名稱:${lang()}
返回:en、zh_CN
2、獲取語言編碼譯文:${text(code)}
例如:${text("你好")}
3、獲取語言編碼譯文,支援引數:${text(code, params...)}
例如:${text("今天第{0}天", 3)}
JavaScript
1、獲取語言名稱:window.lang || 'zh_CN'
返回:en、zh_CN
2、獲取語言編碼譯文:text(code)
例如:text("你好")
3、獲取語言編碼譯文,支援引數: text(code, params...)
例如:text("今天第{0}天", 3)
常用語言編碼
java.util.Locale :
public static final Locale ENGLISH = createConstant("en", "");
public static final Locale FRENCH = createConstant("fr", "");
public static final Locale GERMAN = createConstant("de", "");
public static final Locale ITALIAN = createConstant("it", "");
public static final Locale JAPANESE = createConstant("ja", "");
public static final Locale KOREAN = createConstant("ko", "");
public static final Locale CHINESE = createConstant("zh", "");
public static final Locale SIMPLIFIED_CHINESE = createConstant("zh", "CN");
public static final Locale TRADITIONAL_CHINESE = createConstant("zh", "TW");
public static final Locale FRANCE = createConstant("fr", "FR");
public static final Locale GERMANY = createConstant("de", "DE");
public static final Locale ITALY = createConstant("it", "IT");
public static final Locale JAPAN = createConstant("ja", "JP");
public static final Locale KOREA = createConstant("ko", "KR");
public static final Locale CHINA = SIMPLIFIED_CHINESE;
public static final Locale PRC = SIMPLIFIED_CHINESE;
public static final Locale TAIWAN = TRADITIONAL_CHINESE;
public static final Locale UK = createConstant("en", "GB");
public static final Locale US = createConstant("en", "US");
public static final Locale CANADA = createConstant("en", "CA");
public static final Locale CANADA_FRENCH = createConstant("fr", "CA");