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);
}