]> WPIA git - gigi.git/blobdiff - src/org/cacert/gigi/localisation/Language.java
Merge "upd: fixes wording"
[gigi.git] / src / org / cacert / gigi / localisation / Language.java
index 9fc1dcac8a51840a2e3f8005bfed3c4c46242d91..4caaa79beb698533b0bb8de4f26f4aeb12945a67 100644 (file)
@@ -27,12 +27,15 @@ 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>() {
 
@@ -63,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));
@@ -96,6 +99,9 @@ public class Language {
     }
 
     public String getTranslation(String text) {
+        if (text == null || text.equals("")) {
+            return text;
+        }
         String string = translations.get(text);
         if (string == null || string.equals("")) {
             return text;
@@ -103,17 +109,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 +130,12 @@ public class Language {
             } catch (SAXException e) {
                 e.printStackTrace();
             }
+            return lang;
         }
-        return l;
     }
 
     public Locale getLocale() {
-        return l;
+        return locale;
     }
 
 }