package connect.utils; import android.text.TextUtils; import android.util.Xml; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import connect.db.SharedPreferenceUtil; import connect.ui.base.BaseApplication; /** * Language International Chemical */ public class GlobalLanguageUtil { private static GlobalLanguageUtil globalLanguageUtil; public static GlobalLanguageUtil getInstance() { if (globalLanguageUtil == null) { synchronized (GlobalLanguageUtil.class) { if (globalLanguageUtil == null) { globalLanguageUtil = new GlobalLanguageUtil(); } } } return globalLanguageUtil; } private String Tag = "GlobalLanguageUtil"; private Map<String, String> languageMap = new HashMap<>(); public GlobalLanguageUtil() { String code = SharedPreferenceUtil.getInstance().getStringValue(SharedPreferenceUtil.APP_LANGUAGE_CODE); if (TextUtils.isEmpty(code)) { code = "en"; } try { xmlParse(code); } catch (Exception e) { e.printStackTrace(); } } public void transLanguage() { globalLanguageUtil = null; getInstance(); } public void xmlParse(String code) throws XmlPullParserException, IOException { InputStream inputStream = BaseApplication.getInstance().getApplicationContext().getAssets().open("emotion_zh.xml"); XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(inputStream, "UTF-8"); String keyEn = ""; String keyZh = ""; int eventType = pullParser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT: languageMap.clear(); break; case XmlPullParser.START_TAG: keyEn = pullParser.getAttributeValue("", "name"); pullParser.next(); keyZh = pullParser.getText(); if (!(TextUtils.isEmpty(keyEn) || TextUtils.isEmpty(keyZh))) { if (code.contains("en")) {//ch to en languageMap.put(keyZh, keyEn); } else {//en to ch languageMap.put(keyEn, keyZh); } } break; case XmlPullParser.END_TAG: break; } eventType = pullParser.next(); } } /** * To convert a string into an application language * @return */ public String translateValue(String string){ Pattern pattern = Pattern.compile(RegularUtil.VERIFYCATION_EMOTION); Matcher matcher = pattern.matcher(string); StringBuffer buffer = new StringBuffer(); int startPosi = 0; while (matcher.find()) { String group = matcher.group(); buffer.append(string.substring(startPosi, matcher.start())); buffer.append(replaceLanguage(group)); startPosi = matcher.end(); } int endPosi = string.length(); if (startPosi != endPosi) { buffer.append(string.substring(startPosi, endPosi)); } return buffer.toString(); } public String replaceLanguage(String group) { String index = group; if (group.length() > 2) { index = index.substring(1, index.length() - 1); } index = languageMap.get(index); return TextUtils.isEmpty(index) ? group : "[" + index + "]"; } }