mirror of
https://github.com/nitu2003/T18n
synced 2024-11-21 23:28:49 +00:00
[+] 添加了从在线网站读取的方法
1. 添加了从在线网站读取的方法 2. 移动了部分方法到 T18nUtils 里
This commit is contained in:
parent
4b01a2e58d
commit
b4fa3f0fd0
@ -1,5 +1,6 @@
|
|||||||
package cn.glycol.t18n;
|
package cn.glycol.t18n;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
public class LanguageMap extends HashMap<String, String> {
|
public class LanguageMap extends HashMap<String, String> {
|
||||||
@ -10,4 +11,21 @@ public class LanguageMap extends HashMap<String, String> {
|
|||||||
return super.getOrDefault(key, key.toString());
|
return super.getOrDefault(key, key.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ArrayList<String> getAllKeyValuePairs() {
|
||||||
|
|
||||||
|
ArrayList<String> list = new ArrayList<String>();
|
||||||
|
for(Entry<String, String> set : this.entrySet()) {
|
||||||
|
String key = set.getKey();
|
||||||
|
String val = set.getValue();
|
||||||
|
String line;
|
||||||
|
|
||||||
|
if(key != null && !key.equals("")) {
|
||||||
|
line = key + "=" + val;
|
||||||
|
list.add(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -5,8 +5,6 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -15,103 +13,107 @@ public class LanguageMapBuilder {
|
|||||||
public static LanguageMap fromFile(File langFile) {
|
public static LanguageMap fromFile(File langFile) {
|
||||||
return fromFile(langFile, LanguageMapConfiguration.DEFAULT);
|
return fromFile(langFile, LanguageMapConfiguration.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LanguageMap fromFile(File langFile, LanguageMapConfiguration config) {
|
public static LanguageMap fromFile(File langFile, LanguageMapConfiguration config) {
|
||||||
|
|
||||||
List<String> lines = getLinesFromFile(langFile);
|
List<String> lines = T18nUtils.getLocalContent(langFile);
|
||||||
return getLanguageMapFromLines(config, lines);
|
return processFinal(config, lines);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<String> getLinesFromFile(File file) {
|
|
||||||
if(file.isFile()) {
|
|
||||||
try {
|
|
||||||
return Files.readAllLines(file.toPath(), Charset.forName("UTF-8"));
|
|
||||||
} catch (Exception e) {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static LanguageMap getLanguageMapFromLines(LanguageMapConfiguration config, List<String> lines) {
|
|
||||||
|
|
||||||
final LanguageMap map = new LanguageMap();
|
|
||||||
|
|
||||||
for(String s : lines) {
|
|
||||||
String[] pair = getLanguageMapFromLine(config, s);
|
|
||||||
if(!isUnreadable(pair)) {
|
|
||||||
map.put(pair[0], pair[1]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return map;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static final String[] UNREADABLE = new String[] {null, null};
|
|
||||||
|
|
||||||
private static String[] getLanguageMapFromLine(LanguageMapConfiguration config, String s) {
|
|
||||||
|
|
||||||
/* Empty Line */
|
|
||||||
if(s == null || s.length() == 0) {
|
|
||||||
return UNREADABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Annotation */
|
|
||||||
if(config.isAnnotation(s)) {
|
|
||||||
return UNREADABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
String[] parts = s.split(config.getSplitter(s), 2);
|
|
||||||
|
|
||||||
/* The Key is Null */
|
|
||||||
if(parts[0] == null || parts[0].length() == 0) {
|
|
||||||
return UNREADABLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* The Value is Null */
|
|
||||||
if(parts[1] == null) {
|
|
||||||
parts[1] = "null";
|
|
||||||
}
|
|
||||||
|
|
||||||
return parts;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isUnreadable(String[] s) {
|
|
||||||
return s[0] == null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static LanguageMap fromJarResource(String path) {
|
public static LanguageMap fromJarResource(String path) {
|
||||||
return fromJarResource(path, LanguageMapConfiguration.DEFAULT);
|
return fromJarResource(path, LanguageMapConfiguration.DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static LanguageMap fromJarResource(String path, LanguageMapConfiguration config) {
|
public static LanguageMap fromJarResource(String path, LanguageMapConfiguration config) {
|
||||||
|
|
||||||
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
|
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
|
||||||
if(is == null) {
|
if (is == null) {
|
||||||
return new LanguageMap();
|
return new LanguageMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
BufferedReader br = new BufferedReader(new InputStreamReader(is));
|
BufferedReader br = new BufferedReader(new InputStreamReader(is));
|
||||||
|
|
||||||
String cache;
|
String cache;
|
||||||
List<String> strs = new ArrayList<>();
|
List<String> strs = new ArrayList<>();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
while(true) {
|
while (true) {
|
||||||
if((cache = br.readLine()) != null) {
|
if ((cache = br.readLine()) != null) {
|
||||||
strs.add(cache);
|
strs.add(cache);
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch(IOException e) {
|
} catch (IOException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return getLanguageMapFromLines(config, strs);
|
return processFinal(config, strs);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static LanguageMap fromURL(String url) {
|
||||||
|
return fromURL(url, LanguageMapConfiguration.DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
||||||
|
|
||||||
|
/* Empty Line */
|
||||||
|
if (s == null || s.length() == 0) {
|
||||||
|
return UNREADABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Annotation */
|
||||||
|
if (config.isAnnotation(s)) {
|
||||||
|
return UNREADABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
String[] parts = s.split(config.getSplitter(s), 2);
|
||||||
|
|
||||||
|
/* Part fewer than 2 */
|
||||||
|
if(parts.length < 2) {
|
||||||
|
return UNREADABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The Key is Null */
|
||||||
|
if (parts[0] == null || parts[0].length() == 0) {
|
||||||
|
return UNREADABLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* The Value is Null */
|
||||||
|
if (parts[1] == null) {
|
||||||
|
parts[1] = "null";
|
||||||
|
}
|
||||||
|
|
||||||
|
return parts;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean isUnreadable(String[] s) {
|
||||||
|
return s[0] == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 将处理的结果整合到翻译表中 */
|
||||||
|
private static LanguageMap processFinal(LanguageMapConfiguration config, List<String> lines) {
|
||||||
|
|
||||||
|
final LanguageMap map = new LanguageMap();
|
||||||
|
|
||||||
|
for (String s : lines) {
|
||||||
|
String[] pair = process(config, s);
|
||||||
|
if (!isUnreadable(pair)) {
|
||||||
|
map.put(pair[0], pair[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return map;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
88
src/main/java/cn/glycol/t18n/T18nUtils.java
Normal file
88
src/main/java/cn/glycol/t18n/T18nUtils.java
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
package cn.glycol.t18n;
|
||||||
|
|
||||||
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.MalformedURLException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
public class T18nUtils {
|
||||||
|
|
||||||
|
/** 从在线网站上读取内容 */
|
||||||
|
public static List<String> getOnlineContent(String _url) {
|
||||||
|
|
||||||
|
URL url;
|
||||||
|
try {
|
||||||
|
url = new URL(_url);
|
||||||
|
} catch(MalformedURLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||||
|
InputStream is = conn.getInputStream();
|
||||||
|
BufferedReader br = new BufferedReader(new InputStreamReader(is));
|
||||||
|
List<String> lines = new ArrayList<String>();
|
||||||
|
String s;
|
||||||
|
while((s = br.readLine()) != null) {
|
||||||
|
lines.add(s);
|
||||||
|
}
|
||||||
|
is.close();
|
||||||
|
br.close();
|
||||||
|
return lines;
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 从本地文件读取内容 */
|
||||||
|
public static List<String> getLocalContent(File file) {
|
||||||
|
if (file.isFile()) {
|
||||||
|
try {
|
||||||
|
return Files.readAllLines(file.toPath(), Charset.forName("UTF-8"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 保存翻译表到文件 */
|
||||||
|
public static void saveLanguageMap(LanguageMap map, File file) {
|
||||||
|
|
||||||
|
Objects.requireNonNull(map);
|
||||||
|
Objects.requireNonNull(file);
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
String content = I18n.flattenList(map.getAllKeyValuePairs());
|
||||||
|
|
||||||
|
if(!file.exists()) {
|
||||||
|
file.getParentFile().mkdirs();
|
||||||
|
file.createNewFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
FileWriter fw = new FileWriter(file);
|
||||||
|
fw.write(content);
|
||||||
|
fw.close();
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.err.println("Unable to write "+file);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user