From 4b01a2e58d47ea24d4fa7976220ce28a3f3baca2 Mon Sep 17 00:00:00 2001 From: Taskeren Date: Sun, 30 Jun 2019 15:26:41 +0800 Subject: [PATCH] =?UTF-8?q?[+/-]=20=E5=AF=B9=E6=96=B9=E6=B3=95=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BA=86=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 添加了 translateList 和 flattenList 方法 2. 修改了 formatList 方法 --- src/main/java/cn/glycol/t18n/I18n.java | 43 ++++++++++++++++++-------- 1 file changed, 30 insertions(+), 13 deletions(-) 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); }