OSDN Git Service

Support for new translations (Brazilian Portuguese).
[sudokuki/sudokuki.git] / src / classes / net / jankenpoi / sudokuki / ui / swing / LanguageMenu.java
1 /*\r
2  * Sudokuki - essential sudoku game\r
3  * Copyright (C) 2007-2012 Sylvain Vedrenne\r
4  *\r
5  * This program is free software: you can redistribute it and/or modify\r
6  * it under the terms of the GNU General Public License as published by\r
7  * the Free Software Foundation, either version 3 of the License, or\r
8  * (at your option) any later version.\r
9  * \r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  * \r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.\r
17  */\r
18 package net.jankenpoi.sudokuki.ui.swing;\r
19 \r
20 import static net.jankenpoi.i18n.I18n._;\r
21 \r
22 import java.awt.event.ActionEvent;\r
23 import java.awt.event.MouseAdapter;\r
24 import java.awt.event.MouseEvent;\r
25 import java.util.HashMap;\r
26 import java.util.Locale;\r
27 \r
28 import javax.swing.AbstractAction;\r
29 import javax.swing.ButtonGroup;\r
30 import javax.swing.Icon;\r
31 import javax.swing.JMenu;\r
32 import javax.swing.JRadioButtonMenuItem;\r
33 import javax.swing.event.MenuEvent;\r
34 import javax.swing.event.MenuListener;\r
35 \r
36 import net.jankenpoi.i18n.I18n;\r
37 import net.jankenpoi.i18n.LocaleListener;\r
38 import net.jankenpoi.sudokuki.ui.L10nComponent;\r
39 \r
40 @SuppressWarnings("serial")\r
41 public class LanguageMenu extends JMenu implements L10nComponent {\r
42 \r
43         private HashMap<String, JRadioButtonMenuItem> itemsMap = new HashMap<String, JRadioButtonMenuItem>();\r
44 \r
45         private String langCode;\r
46         \r
47         public LanguageMenu() {\r
48                 addItems();\r
49                 setIcon(languageIcon(_("DETECTED_LANGUAGE")));\r
50                 \r
51                 addMenuListener(new MenuListener() {\r
52                         \r
53                         @Override\r
54                         public void menuSelected(MenuEvent arg0) {\r
55                                 final String detectedLanguage = _("DETECTED_LANGUAGE");\r
56                                 langCode = detectedLanguage;\r
57                         }\r
58                         \r
59                         @Override\r
60                         public void menuDeselected(MenuEvent arg0) {\r
61                                 I18n.reset(langCode);\r
62                         }\r
63                         \r
64                                                 @Override\r
65                         public void menuCanceled(MenuEvent arg0) {\r
66                                 I18n.reset(langCode);\r
67                         }\r
68                 });\r
69                 \r
70                 final String detectedLanguage = _("DETECTED_LANGUAGE");\r
71                 JRadioButtonMenuItem selectedItem = itemsMap.get(detectedLanguage);\r
72                 setText(_("Language"));\r
73                 if (selectedItem != null) {\r
74                         selectedItem.setSelected(true);\r
75                 }\r
76                 localeListener = new LocaleListenerImpl(this);\r
77                 I18n.addLocaleListener(localeListener);\r
78         }\r
79                         \r
80         private void addItems() {\r
81                 ButtonGroup myGroup = new ButtonGroup();\r
82                 addItem("de", _("German"), myGroup);\r
83                 addItem("el", _("Greek"), myGroup);\r
84                 addItem("en", _("English"), myGroup);\r
85                 addItem("eo", _("Esperanto"), myGroup);\r
86                 addItem("es", _("Spanish"), myGroup);\r
87                 addItem("fr", _("French"), myGroup);\r
88                 addItem("ja", _("Japanese"), myGroup);\r
89                 addItem("lv", _("Latvian"), myGroup);\r
90                 addItem("nl", _("Dutch"), myGroup);
91                 addItem("pt", _("Portuguese"), myGroup);\r
92                 addItem("pt_BR", _("Brazilian Portuguese"), myGroup);\r
93                 addItem("ru", _("Russian"), myGroup);\r
94                 addItem("zh", _("Mandarin"), myGroup);\r
95         }\r
96 \r
97         private void addItem(final String code, String language, ButtonGroup group) {\r
98                 JRadioButtonMenuItem radioItem;\r
99 \r
100                 radioItem = new JRadioButtonMenuItem(language);\r
101                 itemsMap.put(code, radioItem);\r
102                 radioItem.setAction(new AbstractAction(language, languageIcon(code)) {\r
103 \r
104                         @Override\r
105                         public void actionPerformed(ActionEvent arg0) {\r
106                                 I18n.reset(code);\r
107                         }\r
108                 });\r
109 \r
110                 radioItem.addMouseListener(new MouseAdapter() {\r
111 \r
112                         @Override\r
113                         public void mouseEntered(MouseEvent e) {\r
114                                 I18n.reset(code);\r
115                         }\r
116                         \r
117                         @Override\r
118                         public void mouseExited(MouseEvent e) {\r
119                                 I18n.reset(langCode);\r
120                         }\r
121 \r
122                 });\r
123                 group.add(radioItem);\r
124                 add(radioItem);\r
125         }\r
126 \r
127         private final LocaleListener localeListener;\r
128                 @Override\r
129                 public void setL10nMessages(Locale locale, String languageCode) {\r
130                         setText(_("Language"));\r
131                         setIcon(languageIcon(languageCode));\r
132                         \r
133                         if (this.isSelected()) {\r
134                                 return;\r
135                         }\r
136             refreshItem(languageCode, "de", "German");\r
137             refreshItem(languageCode, "el", "Greek");\r
138             refreshItem(languageCode, "en", "English");\r
139             refreshItem(languageCode, "eo", "Esperanto");\r
140             refreshItem(languageCode, "es", "Spanish");\r
141             refreshItem(languageCode, "fr", "French");\r
142             refreshItem(languageCode, "ja", "Japanese");\r
143             refreshItem(languageCode, "lv", "Latvian");\r
144             refreshItem(languageCode, "nl", "Dutch");
145             refreshItem(languageCode, "pt", "Portuguese");\r
146             refreshItem(languageCode, "pt_BR", "Brazilian Portuguese");\r
147             refreshItem(languageCode, "ru", "Russian");\r
148             refreshItem(languageCode, "zh", "Mandarin");\r
149                 }\r
150 \r
151                 private void refreshItem(final String langCode, final String itemCode, final String langName) {\r
152                         JRadioButtonMenuItem item = itemsMap.get(itemCode);\r
153                         if (item != null) {\r
154                                 item.setText(_(langName));\r
155                                 if (itemCode.equals(langCode)) {\r
156                                         item.setSelected(true);\r
157                                 }\r
158                         }\r
159                 }\r
160         \r
161                 public static Icon languageIcon(final String langCode) {\r
162                         if ("de".equals(langCode)) {\r
163                                 return StockIcons.ICON_FLAG_DE;\r
164                         } else if ("el".equals(langCode)) {\r
165                                 return StockIcons.ICON_FLAG_EL;\r
166                         } else if ("eo".equals(langCode)) {\r
167                                 return StockIcons.ICON_FLAG_EO;\r
168                         } else if ("en".equals(langCode)) {\r
169                                 return StockIcons.ICON_FLAG_EN;\r
170                         } else if ("es".equals(langCode)) {\r
171                                 return StockIcons.ICON_FLAG_ES;\r
172                         } else if ("fr".equals(langCode)) {\r
173                                 return StockIcons.ICON_FLAG_FR;\r
174                         } else if ("ja".equals(langCode)) {\r
175                                 return StockIcons.ICON_FLAG_JA;\r
176                         } else if ("lv".equals(langCode)) {\r
177                                 return StockIcons.ICON_FLAG_LV;\r
178                         } else if ("nl".equals(langCode)) {\r
179                                 return StockIcons.ICON_FLAG_NL;\r
180                         } else if ("pt".equals(langCode)) {\r
181                                 return StockIcons.ICON_FLAG_PT;\r
182                         } else if ("pt_BR".equals(langCode)) {\r
183                                 return StockIcons.ICON_FLAG_BR;\r
184                         } else if ("ru".equals(langCode)) {\r
185                                 return StockIcons.ICON_FLAG_RU;\r
186                         } else if ("zh".equals(langCode)) {\r
187                                 return StockIcons.ICON_FLAG_ZH;\r
188                         }\r
189                         return StockIcons.ICON_GO_HOME;\r
190                 }\r
191                 \r
192 }\r