1
0
mirror of https://github.com/nitu2003/T18n synced 2024-11-22 07:48:47 +00:00

[+/-] 对方法进行了调整

1. 添加了 translateList 和 flattenList 方法
2. 修改了 formatList 方法
This commit is contained in:
Taskeren 2019-06-30 15:26:41 +08:00
parent ce04f7487e
commit 4b01a2e58d

View File

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