source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/LanguagePreference.java@ 2754

Last change on this file since 2754 was 2754, checked in by stoecker, 14 years ago

fixed translation problems, i18n update

File size: 3.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.util.ArrayList;
8import java.util.Arrays;
9import java.util.List;
10import java.util.Locale;
11
12import javax.swing.Box;
13import javax.swing.DefaultComboBoxModel;
14import javax.swing.DefaultListCellRenderer;
15import javax.swing.JComboBox;
16import javax.swing.JLabel;
17import javax.swing.JList;
18import javax.swing.JPanel;
19import javax.swing.ListCellRenderer;
20
21import org.openstreetmap.josm.Main;
22import org.openstreetmap.josm.tools.GBC;
23import org.openstreetmap.josm.tools.I18n;
24
25public class LanguagePreference implements PreferenceSetting {
26 public static class Factory implements PreferenceSettingFactory {
27 public PreferenceSetting createPreferenceSetting() {
28 return new LanguagePreference();
29 }
30 }
31
32 /** the combo box with the available locales */
33 private JComboBox langCombo;
34 /** the model for the combo box */
35 private LanguageComboBoxModel model;
36 /** true, if the available translations have been loaded; false otherwise */
37 private boolean translationsLoaded = false;
38
39 public void addGui(final PreferenceTabbedPane gui) {
40 model = new LanguageComboBoxModel();
41 langCombo = new JComboBox(model);
42 langCombo.setRenderer(new LanguageCellRenderer(langCombo.getRenderer()));
43 model.selectLanguage(Main.pref.get("language"));
44
45 LafPreference lafPreference = gui.getSetting(LafPreference.class);
46 final JPanel panel = lafPreference.panel;
47 panel.add(new JLabel(tr("Language")), GBC.std().insets(20, 0, 0, 0));
48 panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
49 panel.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
50 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
51 }
52
53 public boolean ok() {
54 if (!translationsLoaded)
55 // keep the current language, don't update preferences
56 return false;
57 if(langCombo.getSelectedItem() == null)
58 return Main.pref.put("language", null);
59 else
60 return Main.pref.put("language",
61 ((Locale)langCombo.getSelectedItem()).toString());
62 }
63
64 private static class LanguageComboBoxModel extends DefaultComboBoxModel {
65 private final List<Locale> data = new ArrayList<Locale>();
66
67 public LanguageComboBoxModel(){
68 data.add(0,null);
69 data.addAll(Arrays.asList(I18n.getAvailableTranslations()));
70 }
71
72 public void selectLanguage(String language) {
73 setSelectedItem(null);
74 if (language != null) {
75 for (Locale locale: data) {
76 if (locale == null) {
77 continue;
78 }
79 if (locale.toString().equals(language)) {
80 setSelectedItem(locale);
81 return;
82 }
83 }
84 }
85 }
86
87 @Override
88 public Object getElementAt(int index) {
89 return data.get(index);
90 }
91
92 @Override
93 public int getSize() {
94 return data.size();
95 }
96 }
97
98 static private class LanguageCellRenderer extends DefaultListCellRenderer {
99 private ListCellRenderer dispatch;
100 public LanguageCellRenderer(ListCellRenderer dispatch) {
101 this.dispatch = dispatch;
102 }
103 @Override
104 public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
105 boolean cellHasFocus) {
106 Locale l = (Locale) value;
107 return dispatch.getListCellRendererComponent(list,
108 l == null ? tr("Default (Auto determined)") : l.getDisplayName(),
109 index, isSelected, cellHasFocus);
110 }
111 }
112}
Note: See TracBrowser for help on using the repository browser.