OSDN Git Service

0da27abf5448a22180ca77fdbb12bdf5e5b1e1d4
[sudokuki/sudokuki.git] / src / classes / net / jankenpoi / i18n / I18n.java
1 package net.jankenpoi.i18n;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Locale;\r
5 import java.util.ResourceBundle;\r
6 \r
7 /**\r
8  * HOW TO USE THIS CLASS:<br/>\r
9  * import static net.jankenpoi.i18n._; \r
10  */\r
11 public class I18n {\r
12 \r
13         private static ResourceBundle catalog;\r
14 \r
15         private static Locale currentLocale;\r
16 \r
17         private static Object lock = new Object();\r
18 \r
19         private final static ArrayList<LocaleListener> listeners = new ArrayList<LocaleListener>();\r
20 \r
21         static {\r
22                 reset("");\r
23         }\r
24 \r
25         public static void reset(String localeString) {\r
26                 synchronized (lock) {\r
27                         try {\r
28                                 if (localeString != "")\r
29                                         currentLocale = new Locale(localeString);\r
30                                 if (currentLocale == null)\r
31                                         currentLocale = new Locale(System.getenv("LANG"));\r
32                                 ResourceBundle rb = ResourceBundle.getBundle(I18n.class\r
33                                                 .getName().replace("I18n", "sudokuki"), currentLocale);\r
34                                 catalog = rb;\r
35                                 for (int i = 0; i < listeners.size(); i++) {\r
36                                         listeners.get(i).onLocaleChanged(currentLocale);\r
37                                 }\r
38                         } catch (Exception e1) {\r
39                                 try {\r
40                                         if (catalog == null) {\r
41                                                 if (System.getenv("LANG") != null) {\r
42                                                         System.out\r
43                                                                         .println("I18n unable to find translations for (LANG) locale "\r
44                                                                                         + System.getenv("LANG"));\r
45                                                 }\r
46                                                 catalog = ResourceBundle.getBundle(I18n.class.getName()\r
47                                                                 .replace("I18n", "sudokuki"), Locale\r
48                                                                 .getDefault());\r
49                                                 currentLocale = Locale.getDefault();\r
50                                         }\r
51                                 } catch (Exception e2) {\r
52                                         System.out\r
53                                                         .println("I18n unable to find translations for (JVM) locale "\r
54                                                                         + Locale.getDefault());\r
55                                         catalog = null;\r
56                                 }\r
57                         }\r
58                 }\r
59         }\r
60 \r
61         public static void addLocaleListener(LocaleListener listener) {\r
62                 synchronized (listeners) {\r
63                         if (listener != null) {\r
64                                 listeners.add(listener);\r
65                         }\r
66                 }\r
67         }\r
68 \r
69         public static void removeLocaleListener(LocaleListener listener) {\r
70                 synchronized (listeners) {\r
71                         if (listener != null) {\r
72                                 listeners.remove(listener);\r
73                         }\r
74                 }\r
75         }\r
76 \r
77         public static String _(String msgid) {\r
78                 synchronized (lock) {\r
79                         if (catalog != null) {\r
80                                 return gnu.gettext.GettextResource.gettext(catalog, msgid);\r
81                         } else {\r
82                                 return msgid;\r
83                         }\r
84                 }\r
85         }\r
86 }\r