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