X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;f=src%2Forg%2Fcacert%2Fgigi%2Flocalisation%2FLanguage.java;h=95971120f39df4151e997ff2af1d4694cd1bfcee;hb=cc10b8bdcbe80e515cd3b8a3de893a5146ff8790;hp=9fc1dcac8a51840a2e3f8005bfed3c4c46242d91;hpb=aa9bbc94f898c992d8d1a50aee61ff486a855b31;p=gigi.git diff --git a/src/org/cacert/gigi/localisation/Language.java b/src/org/cacert/gigi/localisation/Language.java index 9fc1dcac..95971120 100644 --- a/src/org/cacert/gigi/localisation/Language.java +++ b/src/org/cacert/gigi/localisation/Language.java @@ -27,12 +27,15 @@ public class Language { static { LinkedList supported = new LinkedList<>(); File locales = new File("locale"); - for (File f : locales.listFiles()) { - if ( !f.getName().endsWith(".xml")) { - continue; + File[] listFiles = locales.listFiles(); + if (listFiles != null) { + for (File f : listFiles) { + if ( !f.getName().endsWith(".xml")) { + continue; + } + String language = f.getName().split("\\.", 2)[0]; + supported.add(getLocaleFromString(language)); } - String language = f.getName().split("\\.", 2)[0]; - supported.add(getLocaleFromString(language)); } Collections.sort(supported, new Comparator() { @@ -63,22 +66,22 @@ public class Language { private HashMap translations = new HashMap(); - private Locale l; + private Locale locale; - private static Locale project(Locale l) { - if (l == null) { + private static Locale project(Locale locale) { + if (locale == null) { return Locale.getDefault(); } - File file = new File("locale", l.toString() + ".xml"); + File file = new File("locale", locale.toString() + ".xml"); if ( !file.exists()) { - return new Locale(l.getLanguage()); + return new Locale(locale.getLanguage()); } - return l; + return locale; } - protected Language(Locale loc) throws ParserConfigurationException, IOException, SAXException { - File file = new File("locale", loc.toString() + ".xml"); - l = loc; + protected Language(Locale locale) throws ParserConfigurationException, IOException, SAXException { + File file = new File("locale", locale.toString() + ".xml"); + this.locale = locale; DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Document d = db.parse(new FileInputStream(file)); @@ -103,17 +106,20 @@ public class Language { return string; } - public static Language getInstance(Locale language) { - language = project(language); - File file = new File("locale", language.toString() + ".xml"); + public static Language getInstance(Locale locale) { + locale = project(locale); + File file = new File("locale", locale.toString() + ".xml"); if ( !file.exists()) { return null; } - Language l = langs.get(language.toString()); - if (l == null) { + synchronized (Language.class) { + Language lang = langs.get(locale.toString()); + if (lang != null) { + return lang; + } try { - l = new Language(language); - langs.put(language.toString(), l); + lang = new Language(locale); + langs.put(locale.toString(), lang); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (IOException e) { @@ -121,12 +127,12 @@ public class Language { } catch (SAXException e) { e.printStackTrace(); } + return lang; } - return l; } public Locale getLocale() { - return l; + return locale; } }