OSDN Git Service

Updated README
[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(final String localeString) {\r
26                 String[] split = localeString.split("_");\r
27                 String lang = split[0];\r
28                 String country = split.length > 1 ? split[1] : "";\r
29                 synchronized (lock) {\r
30                         try {\r
31                                 if (!"".equals(localeString)) {\r
32                                         currentLocale = new Locale(lang, country);\r
33                                 }\r
34                                 if (currentLocale == null)\r
35                                         currentLocale = new Locale(System.getenv("LANG"));\r
36                                 ResourceBundle rb = ResourceBundle.getBundle(I18n.class\r
37                                                 .getName().replace("I18n", "sudokuki"), currentLocale);\r
38                                 catalog = rb;\r
39                                 for (int i = 0; i < listeners.size(); i++) {\r
40                                         listeners.get(i).onLocaleChanged(currentLocale);\r
41                                 }\r
42                         } catch (Exception e1) {\r
43                                 try {\r
44                                         if (catalog == null) {\r
45                                                 if (System.getenv("LANG") != null) {\r
46                                                         System.out\r
47                                                                         .println("I18n unable to find translations for (LANG) locale "\r
48                                                                                         + System.getenv("LANG"));\r
49                                                 }\r
50                                                 catalog = ResourceBundle.getBundle(I18n.class.getName()\r
51                                                                 .replace("I18n", "sudokuki"), Locale\r
52                                                                 .getDefault());\r
53                                                 currentLocale = Locale.getDefault();\r
54                                         }\r
55                                 } catch (Exception e2) {\r
56                                         System.out\r
57                                                         .println("I18n unable to find translations for (JVM) locale "\r
58                                                                         + Locale.getDefault());\r
59                                         catalog = null;\r
60                                 }\r
61                         }\r
62                 }\r
63         }\r
64 \r
65         public static void addLocaleListener(LocaleListener listener) {\r
66                 synchronized (listeners) {\r
67                         if (listener != null) {\r
68                                 listeners.add(listener);\r
69                         }\r
70                 }\r
71         }\r
72 \r
73         public static void removeLocaleListener(LocaleListener listener) {\r
74                 synchronized (listeners) {\r
75                         if (listener != null) {\r
76                                 listeners.remove(listener);\r
77                         }\r
78                 }\r
79         }\r
80 \r
81         public static String _(String msgid) {\r
82                 synchronized (lock) {\r
83                         if (catalog != null) {\r
84                                 return gnu.gettext.GettextResource.gettext(catalog, msgid);\r
85                         } else {\r
86                                 return msgid;\r
87                         }\r
88                 }\r
89         }\r
90 }\r