I18NHandler.java 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package com.zjinja.mcmod.decor.misc;
  2. import com.google.common.base.Splitter;
  3. import com.google.common.collect.Iterables;
  4. import com.google.common.collect.Maps;
  5. import com.zjinja.mcmod.decor.ZJinJaDecoration;
  6. import net.minecraft.util.StringTranslate;
  7. import org.apache.commons.io.Charsets;
  8. import org.apache.commons.io.IOUtils;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.util.HashMap;
  12. import java.util.IllegalFormatException;
  13. import java.util.Iterator;
  14. import java.util.regex.Pattern;
  15. public class I18NHandler {
  16. private static final Splitter equalSignSplitter = Splitter.on('=').limit(2);
  17. private static final Pattern numericVariablePattern = Pattern.compile("%(\\d+\\$)?[\\d\\.]*[df]");
  18. private HashMap<String,String> table = Maps.newHashMap();
  19. public I18NHandler(String locale){
  20. try {
  21. InputStream is = StringTranslate.class.getResourceAsStream(
  22. String.format("/serverside/%s/i18n/%s.lang", ZJinJaDecoration.MODID, locale)
  23. );
  24. Iterator iterator = IOUtils.readLines(is, Charsets.UTF_8).iterator();
  25. while (iterator.hasNext())
  26. {
  27. String s = (String)iterator.next();
  28. if (!s.isEmpty() && s.charAt(0) != '#')
  29. {
  30. String[] astring = (String[]) Iterables.toArray(equalSignSplitter.split(s), String.class);
  31. if (astring != null && astring.length == 2)
  32. {
  33. String s1 = astring[0];
  34. String s2 = numericVariablePattern.matcher(astring[1]).replaceAll("%$1s");
  35. table.put(s1, s2);
  36. }
  37. }
  38. }
  39. ZJinJaDecoration.logger.info(String.format("[zjinjadecoration-I18N] %d Locale Dictionary Items Loaded.\n",table.size()));
  40. }catch (IOException e){
  41. ZJinJaDecoration.logger.error(String.format("[zjinjadecoration] Error: Failed Load I18N Locale Resource: '%s'.\n",locale));
  42. e.printStackTrace();
  43. }
  44. }
  45. private String tryTranslateKey(String key)
  46. {
  47. String s1 = this.table.get(key);
  48. return s1 == null ? key : s1;
  49. }
  50. public synchronized boolean containsTranslateKey(String key)
  51. {
  52. return this.table.containsKey(key);
  53. }
  54. public synchronized String translateKeyFormat(String key, Object ... param)
  55. {
  56. String s1 = this.tryTranslateKey(key);
  57. try
  58. {
  59. return String.format(s1, param);
  60. }
  61. catch (IllegalFormatException illegalformatexception)
  62. {
  63. return "Format error: " + s1;
  64. }
  65. }
  66. public synchronized String translateKey(String key)
  67. {
  68. return this.tryTranslateKey(key);
  69. }
  70. }