From ce04f7487e2ef3766d10cf20fea8558584a07f3c Mon Sep 17 00:00:00 2001 From: Taskeren Date: Fri, 28 Jun 2019 12:40:06 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E6=B7=BB=E5=8A=A0=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E8=AF=BB=E5=8F=96&=E6=B7=BB=E5=8A=A0=E5=87=A0=E4=B8=AA?= =?UTF-8?q?=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/cn/glycol/t18n/I18n.java | 47 +++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) 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);