This commit is contained in:
2019-06-25 21:29:10 +08:00
commit 5b058e8d58
16 changed files with 503 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
package cn.glycol.t18n;
public class I18n {
private static LanguageMap map;
public static void setLanguageMap(LanguageMap map) {
I18n.map = map;
}
public static String format(String key, Object...format) {
return tryFormat(getLanguageMapSafe().get(key), format);
}
public static boolean hasKey(String key) {
return getLanguageMapSafe().containsKey(key);
}
private static String tryFormat(String context, Object...format) {
try {
return String.format(context, format);
} catch (Exception e) {
return context;
}
}
private static LanguageMap getLanguageMapSafe() {
return map == null ? new LanguageMap() : map;
}
}

View File

@@ -0,0 +1,13 @@
package cn.glycol.t18n;
import java.util.HashMap;
public class LanguageMap extends HashMap<String, String> {
private static final long serialVersionUID = 6462356389654896361L;
public String get(Object key) {
return super.getOrDefault(key, key.toString());
}
}

View File

@@ -0,0 +1,82 @@
package cn.glycol.t18n;
import java.io.File;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.List;
import com.google.common.collect.Lists;
public class LanguageMapBuilder {
public static LanguageMap fromFile(File langFile) {
return fromFile(langFile, LanguageMapConfiguration.DEFAULT);
}
public static LanguageMap fromFile(File langFile, LanguageMapConfiguration config) {
List<String> lines = getLinesFromFile(langFile);
return getLanguageMapFromLines(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 Lists.<String>newArrayList();
}
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;
}
}

View File

@@ -0,0 +1,22 @@
package cn.glycol.t18n;
public interface LanguageMapConfiguration {
public String getSplitter(String s);
public boolean isAnnotation(String s);
public static final LanguageMapConfiguration DEFAULT = new LanguageMapConfiguration() {
@Override
public String getSplitter(String s) {
return "=";
}
@Override
public boolean isAnnotation(String s) {
return s.startsWith("#");
}
};
}