v1.0
This commit is contained in:
31
src/main/java/cn/glycol/t18n/I18n.java
Normal file
31
src/main/java/cn/glycol/t18n/I18n.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
13
src/main/java/cn/glycol/t18n/LanguageMap.java
Normal file
13
src/main/java/cn/glycol/t18n/LanguageMap.java
Normal 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());
|
||||
}
|
||||
|
||||
}
|
||||
82
src/main/java/cn/glycol/t18n/LanguageMapBuilder.java
Normal file
82
src/main/java/cn/glycol/t18n/LanguageMapBuilder.java
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
22
src/main/java/cn/glycol/t18n/LanguageMapConfiguration.java
Normal file
22
src/main/java/cn/glycol/t18n/LanguageMapConfiguration.java
Normal 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("#");
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user