diff --git a/src/main/java/cn/glycol/t18n/I18n.java b/src/main/java/cn/glycol/t18n/I18n.java index 26f8918..8d22207 100644 --- a/src/main/java/cn/glycol/t18n/I18n.java +++ b/src/main/java/cn/glycol/t18n/I18n.java @@ -9,6 +9,8 @@ public class I18n { private static LanguageMap map; private static Charset charset; + public static final int LOOP_MAX_COUNT = 1000; + static { charset = Charset.forName(System.getProperty("file.encoding")); } @@ -21,6 +23,11 @@ public class I18n { I18n.charset = Charset.forName(charset); } + /** 自动从语言文件中提取翻译,空翻译时返回原键值 */ + public static String translate(String key) { + return reEncode(getLanguageMapSafe().get(key), charset); + } + /** 自动翻译(translate)后再执行格式化(format) */ public static String format(String key, Object...format) { return tryFormat( @@ -28,24 +35,19 @@ public class I18n { 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) + /** + * 连续读取翻译(translate)。 + * @param keyRegular 翻译键值表达式,需要填入一个“%s”用于替换为行数。行数从0开始。例如“welcome.%s”,则程序会依次向列表中添加“welcome.0”,“welcome.1”...的翻译,直到获取到空值。 */ - public static String format2(String key, Object...format) { + public static List translateList(String keyRegular) { List vlist = new ArrayList(); int i = 0; - int max = 1000; while(true) { - if(i >= max) break; - String k = tryFormat(key, i); + if(i >= LOOP_MAX_COUNT) break; + String k = tryFormat(keyRegular, i); if(hasKey(k)) { vlist.add(translate(k)); } else { @@ -54,18 +56,33 @@ public class I18n { i++; } + return vlist; + + } + + /** 使字符串列表扁平化。 */ + public static String flattenList(List vlist) { + String v = ""; for(String o : vlist) { v += o + "\n"; } v = v.trim(); - v = tryFormat(v, format); - return v; } + /** + * 将列表翻译中的内容进行format操作。 + * @see #translateList(String) + */ + public static String formatList(String keyRegular, Object...format) { + + return tryFormat(flattenList(translateList(keyRegular)), format); + + } + public static boolean hasKey(String key) { return getLanguageMapSafe().containsKey(key); }