T18n/src/main/java/cn/glycol/t18n/LanguageMapBuilder.java

155 lines
3.6 KiB
Java
Raw Normal View History

2019-06-25 13:29:10 +00:00
package cn.glycol.t18n;
2019-06-26 09:10:15 +00:00
import java.io.BufferedReader;
2019-06-25 13:29:10 +00:00
import java.io.File;
2019-06-26 09:10:15 +00:00
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
2019-06-25 13:38:19 +00:00
import java.util.ArrayList;
2019-06-25 13:29:10 +00:00
import java.util.List;
public class LanguageMapBuilder {
2019-07-12 05:55:18 +00:00
/**
*
* @param langFile
* @return
*/
2019-06-25 13:29:10 +00:00
public static LanguageMap fromFile(File langFile) {
return fromFile(langFile, LanguageMapConfiguration.DEFAULT);
}
2019-07-12 05:55:18 +00:00
/**
*
* @param langFile
* @param config
* @return
*/
2019-06-25 13:29:10 +00:00
public static LanguageMap fromFile(File langFile, LanguageMapConfiguration config) {
List<String> lines = T18nUtils.getLocalContent(langFile);
return processFinal(config, lines);
2019-06-25 13:29:10 +00:00
}
2019-07-12 05:55:18 +00:00
/**
* UTF8 Jar
* @param path
* @return
*/
public static LanguageMap fromJarResource(String path) {
return fromJarResource(path, "UTF8", LanguageMapConfiguration.DEFAULT);
2019-06-25 13:29:10 +00:00
}
2019-07-12 05:55:18 +00:00
/**
* Jar
* @param path
* @param encode <code>UTF-8</code><code>GBK</code><code>Unicode</code>
* @param config
* @return
*/
public static LanguageMap fromJarResource(String path, String encode, LanguageMapConfiguration config) {
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
if (is == null) {
return new LanguageMap();
}
BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName(encode)));
String cache;
List<String> strs = new ArrayList<>();
try {
while (true) {
if ((cache = br.readLine()) != null) {
strs.add(cache);
} else {
break;
}
2019-06-25 13:29:10 +00:00
}
} catch (IOException e) {
2019-06-25 13:29:10 +00:00
}
return processFinal(config, strs);
2019-06-25 13:29:10 +00:00
}
2019-07-12 05:55:18 +00:00
/**
* 线
* @param url
* @return
*/
public static LanguageMap fromURL(String url) {
return fromURL(url, LanguageMapConfiguration.DEFAULT);
}
2019-06-25 13:29:10 +00:00
2019-07-12 05:55:18 +00:00
/**
* 线
* @param url
* @param config
* @return
*/
public static LanguageMap fromURL(String url, LanguageMapConfiguration config) {
return processFinal(config, T18nUtils.getOnlineContent(url));
}
private static final String[] UNREADABLE = new String[] { null, null };
/** 处理单行翻译 */
private static String[] process(LanguageMapConfiguration config, String s) {
2019-06-25 13:29:10 +00:00
/* Empty Line */
if (s == null || s.length() == 0) {
2019-06-25 13:29:10 +00:00
return UNREADABLE;
}
2019-06-25 13:29:10 +00:00
/* Annotation */
if (config.isAnnotation(s)) {
2019-06-25 13:29:10 +00:00
return UNREADABLE;
}
2019-06-25 13:29:10 +00:00
String[] parts = s.split(config.getSplitter(s), 2);
/* Part fewer than 2 */
if(parts.length < 2) {
return UNREADABLE;
}
2019-06-25 13:29:10 +00:00
/* The Key is Null */
if (parts[0] == null || parts[0].length() == 0) {
2019-06-25 13:29:10 +00:00
return UNREADABLE;
}
2019-06-25 13:29:10 +00:00
/* The Value is Null */
if (parts[1] == null) {
2019-06-25 13:29:10 +00:00
parts[1] = "null";
}
2019-06-25 13:29:10 +00:00
return parts;
2019-06-25 13:29:10 +00:00
}
2019-06-25 13:29:10 +00:00
private static boolean isUnreadable(String[] s) {
return s[0] == null;
}
/** 将处理的结果整合到翻译表中 */
private static LanguageMap processFinal(LanguageMapConfiguration config, List<String> lines) {
2019-06-26 09:10:15 +00:00
final LanguageMap map = new LanguageMap();
for (String s : lines) {
String[] pair = process(config, s);
if (!isUnreadable(pair)) {
map.put(pair[0], pair[1]);
2019-06-26 09:10:15 +00:00
}
}
return map;
2019-06-26 09:10:15 +00:00
}
2019-06-25 13:29:10 +00:00
}