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

Last change on this file since 8232 was 8232, checked in by stoecker, 9 years ago

see #11148 - move language stuff to the correct place instead of spreading it in the code

  • Property svn:eol-style set to native
File size: 4.9 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.preferences.display;
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.JLabel;
16import javax.swing.JList;
17import javax.swing.JPanel;
18import javax.swing.ListCellRenderer;
19
20import org.openstreetmap.josm.Main;
21import org.openstreetmap.josm.gui.preferences.PreferenceSetting;
22import org.openstreetmap.josm.gui.preferences.PreferenceSettingFactory;
23import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane;
24import org.openstreetmap.josm.gui.preferences.SubPreferenceSetting;
25import org.openstreetmap.josm.gui.preferences.TabPreferenceSetting;
26import org.openstreetmap.josm.gui.widgets.JosmComboBox;
27import org.openstreetmap.josm.tools.GBC;
28import org.openstreetmap.josm.tools.I18n;
29import org.openstreetmap.josm.tools.LanguageInfo;
30
31/**
32 * Language preferences.
33 */
34public class LanguagePreference implements SubPreferenceSetting {
35
36 /**
37 * Factory used to create a new {@code LanguagePreference}.
38 */
39 public static class Factory implements PreferenceSettingFactory {
40 @Override
41 public PreferenceSetting createPreferenceSetting() {
42 return new LanguagePreference();
43 }
44 }
45
46 /** the combo box with the available locales */
47 private JosmComboBox<Locale> langCombo;
48
49 @Override
50 public void addGui(final PreferenceTabbedPane gui) {
51 LanguageComboBoxModel model = new LanguageComboBoxModel();
52 // Selecting the language BEFORE the JComboBox listens to model changes speed up initialization by ~35ms (see #7386)
53 // See https://stackoverflow.com/questions/3194958/fast-replacement-for-jcombobox-basiccomboboxui
54 model.selectLanguage(Main.pref.get("language"));
55 langCombo = new JosmComboBox<>(model);
56 langCombo.setRenderer(new LanguageCellRenderer());
57
58 LafPreference lafPreference = gui.getSetting(LafPreference.class);
59 final JPanel panel = lafPreference.panel;
60 panel.add(new JLabel(tr("Language")), GBC.std().insets(20, 0, 0, 0));
61 panel.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
62 panel.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
63 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
64
65 TabPreferenceSetting tabPref = lafPreference.getTabPreferenceSetting(gui);
66 tabPref.registerSubTab(this, tabPref.getSubTab(lafPreference));
67 }
68
69 @Override
70 public boolean ok() {
71 if(langCombo.getSelectedItem() == null)
72 return Main.pref.put("language", null);
73 else
74 return Main.pref.put("language",
75 LanguageInfo.getJOSMLocaleCode((Locale)langCombo.getSelectedItem()));
76 }
77
78 private static class LanguageComboBoxModel extends DefaultComboBoxModel<Locale> {
79 private final List<Locale> data = new ArrayList<>();
80
81 public LanguageComboBoxModel(){
82 data.add(0,null);
83 data.addAll(Arrays.asList(I18n.getAvailableTranslations()));
84 }
85
86 public void selectLanguage(String language) {
87 setSelectedItem(null);
88 if (language != null) {
89 language = LanguageInfo.getJavaLocaleCode(language);
90 for (Locale locale: data) {
91 if (locale == null) {
92 continue;
93 }
94 if (locale.toString().equals(language)) {
95 setSelectedItem(locale);
96 return;
97 }
98 }
99 }
100 }
101
102 @Override
103 public Locale getElementAt(int index) {
104 return data.get(index);
105 }
106
107 @Override
108 public int getSize() {
109 return data.size();
110 }
111 }
112
113 private static class LanguageCellRenderer implements ListCellRenderer<Locale> {
114 private final DefaultListCellRenderer dispatch;
115 public LanguageCellRenderer() {
116 this.dispatch = new DefaultListCellRenderer();
117 }
118 @Override
119 public Component getListCellRendererComponent(JList<? extends Locale> list, Locale l,
120 int index, boolean isSelected, boolean cellHasFocus) {
121 return dispatch.getListCellRendererComponent(list,
122 l == null
123 ? tr("Default (Auto determined)")
124 : LanguageInfo.getDisplayName(l),
125 index, isSelected, cellHasFocus);
126 }
127 }
128
129 @Override
130 public boolean isExpert() {
131 return false;
132 }
133
134 @Override
135 public TabPreferenceSetting getTabPreferenceSetting(final PreferenceTabbedPane gui) {
136 return gui.getSetting(LafPreference.class).getTabPreferenceSetting(gui);
137 }
138}
Note: See TracBrowser for help on using the repository browser.