Attached are 2 patches against current SVN:
* I18N: Make java.util.Locale happy
* I18N: Make JOSM language configurable through Preferences
Cheers,
- Michel
>From 6471df894723c5c80e592022e7307a6f94ea5f28 Mon Sep 17 00:00:00 2001
From: Michel Marti <[EMAIL PROTECTED]>
Date: Sun, 2 Nov 2008 09:41:21 +0100
Subject: [PATCH] I18N: Make java.util.Locale happy.
The default Locale constructor does not grok a combined language_COUNTRY
string. We therefore have to split the string and pass language and
country as separate arguments.
---
.../openstreetmap/josm/gui/MainApplication.java | 17 ++++++++++-------
1 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index c76d4f2..9597d18 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -172,13 +172,16 @@ public class MainApplication extends Main {
if(args.containsKey("language"))
localeName = (String)(args.get("language").toArray()[0]);
- //TODO: Check preferences for language
-
- //If override then set new default locale - otherwise, override
- if (localeName != null) {
- Locale.setDefault(new Locale(localeName));
- }
-
+ if (localeName != null) {
+ Locale l;
+ int i = localeName.indexOf('_');
+ if (i > 0) {
+ l = new Locale(localeName.substring(0, i), localeName.substring(i + 1));
+ } else {
+ l = new Locale(localeName);
+ }
+ Locale.setDefault(l);
+ }
try {
i18n = I18nFactory.getI18n(MainApplication.class);
} catch (MissingResourceException ex) {
--
1.5.6.5
>From d120e5c2a30693b6f73617799b65d5c340ce9fcc Mon Sep 17 00:00:00 2001
From: Michel Marti <[EMAIL PROTECTED]>
Date: Sun, 2 Nov 2008 10:04:20 +0100
Subject: [PATCH] I18N: Make JOSM language configurable through Preferences.
---
.../openstreetmap/josm/gui/MainApplication.java | 4 +
.../josm/gui/preferences/LanguagePreference.java | 62 ++++++++++++++++++++
.../josm/gui/preferences/PreferenceDialog.java | 1 +
src/org/openstreetmap/josm/tools/I18n.java | 33 ++++++++++
4 files changed, 100 insertions(+), 0 deletions(-)
create mode 100644 src/org/openstreetmap/josm/gui/preferences/LanguagePreference.java
diff --git a/src/org/openstreetmap/josm/gui/MainApplication.java b/src/org/openstreetmap/josm/gui/MainApplication.java
index 9597d18..b5c4c5d 100644
--- a/src/org/openstreetmap/josm/gui/MainApplication.java
+++ b/src/org/openstreetmap/josm/gui/MainApplication.java
@@ -172,6 +172,10 @@ public class MainApplication extends Main {
if(args.containsKey("language"))
localeName = (String)(args.get("language").toArray()[0]);
+ if (localeName == null) {
+ localeName = Main.pref.get("language", null);
+ }
+
if (localeName != null) {
Locale l;
int i = localeName.indexOf('_');
diff --git a/src/org/openstreetmap/josm/gui/preferences/LanguagePreference.java b/src/org/openstreetmap/josm/gui/preferences/LanguagePreference.java
new file mode 100644
index 0000000..8394565
--- /dev/null
+++ b/src/org/openstreetmap/josm/gui/preferences/LanguagePreference.java
@@ -0,0 +1,62 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.gui.preferences;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.Component;
+import java.util.Locale;
+
+import javax.swing.DefaultListCellRenderer;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JList;
+import javax.swing.ListCellRenderer;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.tools.GBC;
+import org.openstreetmap.josm.tools.I18n;
+
+public class LanguagePreference implements PreferenceSetting {
+ /**
+ * ComboBox with all available Translations
+ */
+ private JComboBox langCombo;
+
+ public void addGui(PreferenceDialog gui) {
+ langCombo = new JComboBox(I18n.getAvailableTranslations());
+ langCombo.insertItemAt(Locale.ENGLISH, 0); // Default (Built-in language)
+ String ln = Locale.getDefault().toString();
+ langCombo.setSelectedIndex(0);
+
+ if (ln != null) {
+ for (int i = 0; i < langCombo.getItemCount(); ++i) {
+ if (((Locale) langCombo.getItemAt(i)).toString().equals(ln)) {
+ langCombo.setSelectedIndex(i);
+ break;
+ }
+ }
+ }
+
+ final ListCellRenderer oldRenderer = langCombo.getRenderer();
+ langCombo.setRenderer(new DefaultListCellRenderer() {
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
+ boolean cellHasFocus) {
+ Locale l = (Locale) value;
+ return oldRenderer.getListCellRendererComponent(list,
+ l == Locale.ENGLISH ? "Default (English)" : l.getDisplayName(),
+ index, isSelected, cellHasFocus);
+ }
+ });
+ langCombo.addActionListener(gui.requireRestartAction);
+
+ gui.display.add(new JLabel(tr("Language")), GBC.std());
+ gui.display.add(GBC.glue(5,0), GBC.std().fill(GBC.HORIZONTAL));
+ gui.display.add(langCombo, GBC.eol().fill(GBC.HORIZONTAL));
+ }
+
+ public void ok() {
+ String l = ((Locale)langCombo.getSelectedItem()).toString();
+ Main.pref.put("language", l.equals("en") ? null : l);
+ }
+}
diff --git a/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java b/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
index 80d1654..162ab79 100644
--- a/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
+++ b/src/org/openstreetmap/josm/gui/preferences/PreferenceDialog.java
@@ -122,6 +122,7 @@ public class PreferenceDialog extends JTabbedPane {
static {
// order is important!
settings.add(new LafPreference());
+ settings.add(new LanguagePreference());
settings.add(new DrawingPreference());
settings.add(new ColorPreference());
settings.add(new MapPaintPreference());
diff --git a/src/org/openstreetmap/josm/tools/I18n.java b/src/org/openstreetmap/josm/tools/I18n.java
index f639593..bc98909 100644
--- a/src/org/openstreetmap/josm/tools/I18n.java
+++ b/src/org/openstreetmap/josm/tools/I18n.java
@@ -2,6 +2,10 @@
package org.openstreetmap.josm.tools;
import java.text.MessageFormat;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.Locale;
+import java.util.Vector;
/**
* Internationalisation support.
@@ -9,6 +13,10 @@ import java.text.MessageFormat;
* @author Immanuel.Scholz
*/
public class I18n {
+
+ /* Base name for translation data. Used for detecting available translations */
+ private static final String TR_BASE = "org.openstreetmap.josm.i18n.Translation_";
+
/**
* Set by MainApplication. Changes here later will probably mess up everything, because
* many strings are already loaded.
@@ -42,4 +50,29 @@ public class I18n {
return n == 1 ? tr(text) : tr(pluralText);
return i18n.trn(text, pluralText, n);
}
+
+ /**
+ * Get a list of all available JOSM Translations.
+ * @return an array of locale objects.
+ */
+ public static final Locale[] getAvailableTranslations() {
+ Vector<Locale> v = new Vector<Locale>();
+ Locale[] l = Locale.getAvailableLocales();
+ for (int i = 0; i < l.length; i++) {
+ String cn = TR_BASE + l[i];
+ try {
+ Class.forName(cn);
+ v.add(l[i]);
+ } catch (ClassNotFoundException e) {
+ }
+ }
+ l = new Locale[v.size()];
+ l = v.toArray(l);
+ Arrays.sort(l, new Comparator<Locale>() {
+ public int compare(Locale o1, Locale o2) {
+ return o1.toString().compareTo(o2.toString());
+ }
+ });
+ return l;
+ }
}
--
1.5.6.5
_______________________________________________
josm-dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/josm-dev