diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml index 7d80438e4..486d66a80 100644 --- a/apps/i2psnark/java/build.xml +++ b/apps/i2psnark/java/build.xml @@ -213,7 +213,9 @@ + diff --git a/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java b/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java index 59f966272..22a81d363 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java +++ b/apps/i2psnark/java/src/org/klomp/snark/standalone/ConfigUIHelper.java @@ -1,5 +1,7 @@ package org.klomp.snark.standalone; +import java.util.Locale; + import net.i2p.I2PAppContext; import net.i2p.util.Translate; @@ -12,7 +14,7 @@ public class ConfigUIHelper { private static final String CHECKED = " selected=\"selected\" "; private static final String BUNDLE_NAME = "org.klomp.snark.web.messages"; - private static final String COUNTRY_BUNDLE_NAME = "net.i2p.router.countries.messages"; + //private static final String COUNTRY_BUNDLE_NAME = "net.i2p.router.countries.messages"; /** * Each language has the ISO code, the flag, the name, and the optional country name. @@ -107,8 +109,12 @@ public class ConfigUIHelper { buf.append(Translate.getDisplayLanguage(slang, langs[i][2], ctx, BUNDLE_NAME)); String name = langs[i][3]; if (name != null) { + String cou = (under > 0) ? lang.substring(under + 1) : lang; + Locale cur = new Locale(current); + Locale loc = new Locale(slang, cou); buf.append(" (") - .append(Translate.getString(name, ctx, COUNTRY_BUNDLE_NAME)) + //.append(Translate.getString(name, ctx, COUNTRY_BUNDLE_NAME)) + .append(loc.getDisplayCountry(cur)) .append(')'); } buf.append("\n"); diff --git a/build.xml b/build.xml index 52598f9ac..90e8a1fac 100644 --- a/build.xml +++ b/build.xml @@ -1834,8 +1834,7 @@ --> - - + diff --git a/core/java/src/net/i2p/util/Translate.java b/core/java/src/net/i2p/util/Translate.java index cf64a5280..dd76f04e8 100644 --- a/core/java/src/net/i2p/util/Translate.java +++ b/core/java/src/net/i2p/util/Translate.java @@ -18,7 +18,11 @@ import net.i2p.util.ConcurrentHashSet; * Translate strings efficiently. * We don't include an English or default ResourceBundle, we simply check * for "en" and return the original string. - * Support real-time language changing with the routerconsole.lang property. + * Support real-time language changing with the routerconsole.lang + * and routerconsole.country properties. + * + * To change language in router context, set the context properties PROP_LANG and PROP_COUNTRY. + * To change language in app context, set the System properties PROP_LANG and PROP_COUNTRY. * * @author zzz, from a base generated by eclipse. * @since 0.7.9 @@ -31,10 +35,6 @@ public abstract class Translate { private static final String _localeLang = Locale.getDefault().getLanguage(); /** non-null, two-letter upper case, may be "" */ private static final String _localeCountry = Locale.getDefault().getCountry(); - /** App context only, two- or three-letter lower case, may be null */ - private static String _overrideLang = null; - /** App context only, two-letter upper case, may be "" or null */ - private static String _overrideCountry = null; private static final Map _bundles = new ConcurrentHashMap(16); private static final Set _missing = new ConcurrentHashSet(16); /** use to look for untagged strings */ @@ -143,12 +143,6 @@ public abstract class Translate { * @return lang in routerconsole.lang property, else current locale */ public static String getLanguage(I2PAppContext ctx) { - if (!ctx.isRouterContext()) { - synchronized(Translate.class) { - if (_overrideLang != null) - return _overrideLang; - } - } String lang = ctx.getProperty(PROP_LANG); if (lang == null || lang.length() <= 0) lang = _localeLang; @@ -161,12 +155,6 @@ public abstract class Translate { * @since 0.9.10 */ public static String getCountry(I2PAppContext ctx) { - if (!ctx.isRouterContext()) { - synchronized(Translate.class) { - if (_overrideCountry != null) - return _overrideCountry; - } - } // property may be empty so we don't have a non-default // language and a default country return ctx.getProperty(PROP_COUNTRY, _localeCountry); @@ -176,15 +164,21 @@ public abstract class Translate { * Only for use by standalone apps in App Context. * NOT for use in Router Context. * Does not persist, apps must implement their own persistence. - * Overrides in all contexts. + * Does NOT override context properties. * * @param lang Two- or three-letter lower case, or null for default * @param country Two-letter upper case, or null for default, or "" for none * @since 0.9.27 */ - public synchronized static void setLanguage(String lang, String country) { - _overrideLang = lang; - _overrideCountry = country; + public static void setLanguage(String lang, String country) { + if (lang != null) + System.setProperty(PROP_LANG, lang); + else + System.clearProperty(PROP_LANG); + if (country != null) + System.setProperty(PROP_COUNTRY, country); + else + System.clearProperty(PROP_COUNTRY); } /**