]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/localisation/Language.java
Update session name for name change
[gigi.git] / src / org / cacert / gigi / localisation / Language.java
index 3d8ee0b6d36db04a1e4ce4554b30e2dd2fd0fff5..95971120f39df4151e997ff2af1d4694cd1bfcee 100644 (file)
@@ -3,6 +3,8 @@ package org.cacert.gigi.localisation;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Locale;
@@ -25,13 +27,24 @@ public class Language {
     static {
         LinkedList<Locale> 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<Locale>() {
+
+            @Override
+            public int compare(Locale o1, Locale o2) {
+                return o1.toString().compareTo(o2.toString());
+            }
+
+        });
         supportedLocales = supported.toArray(new Locale[supported.size()]);
     }
 
@@ -53,22 +66,22 @@ public class Language {
 
     private HashMap<String, String> translations = new HashMap<String, String>();
 
-    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));
@@ -93,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) {
@@ -111,12 +127,12 @@ public class Language {
             } catch (SAXException e) {
                 e.printStackTrace();
             }
+            return lang;
         }
-        return l;
     }
 
     public Locale getLocale() {
-        return l;
+        return locale;
     }
 
 }