diff --git a/src/main/java/cn/glycol/t18n/I18n.java b/src/main/java/cn/glycol/t18n/I18n.java index 7a89c5f..26f8918 100644 --- a/src/main/java/cn/glycol/t18n/I18n.java +++ b/src/main/java/cn/glycol/t18n/I18n.java @@ -1,6 +1,8 @@ package cn.glycol.t18n; import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; public class I18n { @@ -19,16 +21,59 @@ public class I18n { I18n.charset = Charset.forName(charset); } + /** 自动翻译(translate)后再执行格式化(format) */ public static String format(String key, Object...format) { return tryFormat( - reEncode(getLanguageMapSafe().get(key), charset), + translate(key), format); } + /** 自动从语言文件中提取翻译,空翻译时返回原键值 */ + public static String translate(String key) { + return reEncode(getLanguageMapSafe().get(key), charset); + } + + /** 自动翻译(translate)列表,将多行替换为一行后再执行格式化(format)
+ * @param key 进入列表的格式化代码(format key),例如app.message.welcome.%s,其中%s会被替换为从0开始的数字,逐行读取,直到空翻译或最大值(1000) + */ + public static String format2(String key, Object...format) { + + List vlist = new ArrayList(); + + int i = 0; + int max = 1000; + + while(true) { + if(i >= max) break; + String k = tryFormat(key, i); + if(hasKey(k)) { + vlist.add(translate(k)); + } else { + break; + } + i++; + } + + String v = ""; + for(String o : vlist) { + v += o + "\n"; + } + v = v.trim(); + + v = tryFormat(v, format); + + return v; + + } + public static boolean hasKey(String key) { return getLanguageMapSafe().containsKey(key); } + public static boolean canTranslate(String key) { + return hasKey(key); + } + private static String reEncode(String bef, Charset charset) { byte[] bytes = bef.getBytes(); return new String(bytes, charset);