之前做了i18n的國際化,根據請求參數language返回對應的國際化文字。然後需求要生成的消息也要國際化。考慮的解決方案是保存消息時保存所有語言版本的消息。然後查詢時再根據語言查詢。
消息的模板是這樣的,例如:{"zh":"機器{machineName}停機時長{time}","en":"machine {machineName} stop last {time}"}
然後再把相應的參數替換模板。
結果問題出現了,某些消息的時間是通過計算獲得的,比如持續時間根據時間長短,會生成a天b時或者a時b分或者a分b秒這樣,所以我必須根據不同的語言來生成時間。而我想把這做成動態的,而不是在代碼裏寫死。比如{time_en}就自動使用英文來生成時間。
{"zh":"機器{machineName}停機時長{time_zh}","en":"machine {machineName} stop last {time_en}"}
String template = "{\"zh\":\"機器{machineName}停機時長{time_zh}\",\"en\":\"machine {machineName} stop last {time_en}\"}";
String content = template.replace("{machineName}",machineName);
Pattern pattern = Pattern.compile("\\{time_(\\w{2})\\}");
Matcher m = pattern.matcher(content);
while(m.find()) {
String language = m.group(1);
String replace = m.group();
String time = DateUtils.convertToDayHourMinByLanguage(diffTime, language);//通過不同語言計算時間
content = content.replace(replace, time);
}
這樣只要新增語言的時候就不需要修改代碼只要改變模板就行了