diff --git a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java index e0be9d2f8001ec4952d9872a2af7b75d01fc5ef4..1df32a23dab22ed392db645f39050de32ce2be74 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/CSSHelper.java @@ -53,19 +53,20 @@ public class CSSHelper extends HelperBase { /** * change default language for the router AND save it - * @param lang xx OR xx_XX + * @param lang xx OR xx_XX OR xxx OR xxx_XX */ public void setLang(String lang) { // Protected with nonce in css.jsi - if (lang != null) { + if (lang != null && lang.length() > 0) { Map m = new HashMap(2); - if (lang.length() == 2) { + int under = lang.indexOf('_'); + if (under < 0) { m.put(Messages.PROP_LANG, lang.toLowerCase(Locale.US)); m.put(Messages.PROP_COUNTRY, ""); _context.router().saveConfig(m, null); - } else if (lang.length() == 5) { - m.put(Messages.PROP_LANG, lang.substring(0, 2).toLowerCase(Locale.US)); - m.put(Messages.PROP_COUNTRY, lang.substring(3, 5).toUpperCase(Locale.US)); + } else if (under > 0 && lang.length() > under + 1) { + m.put(Messages.PROP_LANG, lang.substring(0, under).toLowerCase(Locale.US)); + m.put(Messages.PROP_COUNTRY, lang.substring(under + 1).toUpperCase(Locale.US)); _context.router().saveConfig(m, null); } } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java index ba65110ef93d65eeff53864df277eb0b618a2021..52137d7cce05d7ebd5576232048fd0bde2f4e25c 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigUIHelper.java @@ -70,6 +70,7 @@ public class ConfigUIHelper extends HelperBase { * See http://en.wikipedia.org/wiki/ISO_639-1 . * Any language-specific flag added to the icon set must be * added to the top-level build.xml for the updater. + * As of 0.9.12, ISO 639-2 three-letter codes are supported also. */ private static final String langs[][] = { { "ar", "lang_ar", _x("Arabic"), null }, @@ -138,7 +139,8 @@ public class ConfigUIHelper extends HelperBase { buf.append("checked=\"checked\" "); buf.append("value=\"").append(lang).append("\">") .append("<img height=\"11\" width=\"16\" alt=\"\" src=\"/flags.jsp?c=").append(langs[i][1]).append("\"> "); - String slang = lang.length() > 2 ? lang.substring(0, 2) : lang; + int under = lang.indexOf('_'); + String slang = (under > 0) ? lang.substring(0, under) : lang; buf.append(Messages.getDisplayLanguage(slang, langs[i][2], _context)); String name = langs[i][3]; if (name != null) { diff --git a/core/java/src/net/i2p/util/Translate.java b/core/java/src/net/i2p/util/Translate.java index 632658cb149a9cecd68679402bbefce8759eacd6..8c53428496332f528b9c73090e4c06b86cc146da 100644 --- a/core/java/src/net/i2p/util/Translate.java +++ b/core/java/src/net/i2p/util/Translate.java @@ -135,7 +135,7 @@ public abstract class Translate { } /** - * Two-letter lower case + * Two- or three-letter lower case * @return lang in routerconsole.lang property, else current locale */ public static String getLanguage(I2PAppContext ctx) { @@ -192,7 +192,7 @@ public abstract class Translate { * by langCode, using the current language. * Uses translation if available, then JVM Locale.getDisplayLanguage() if available, else default param. * - * @param langCode two-letter lower-case + * @param langCode two- or three-letter lower-case * @param dflt e.g. "English" * @since 0.9.5 */