package org.klomp.snark.standalone;
import java.util.Locale;
import net.i2p.I2PAppContext;
import net.i2p.util.Translate;
/**
* Standalone (app context) only.
* Copied from ConfigUIHelper.
* @since 0.9.27
*/
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";
/**
* Each language has the ISO code, the flag, the name, and the optional country name.
* Alphabetical by the ISO code please.
* 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.
*
* Note: we don't currently _x the language strings,
* we'll just rely on the JVM's translations for now.
* Country flag unused.
*/
private static final String langs[][] = {
{ "ar", "lang_ar", "Arabic", null },
{ "cs", "cz", "Czech", null },
//{ "da", "dk", "Danish", null },
{ "de", "de", "German", null },
//{ "et", "ee", "Estonian", null },
//{ "el", "gr", "Greek", null },
{ "en", "us", "English", null },
{ "es", "es", "Spanish", null },
{ "fi", "fi", "Finnish", null },
{ "fr", "fr", "French", null },
//{ "gl", "lang_gl", "Galician", null },
{ "hu", "hu", "Hungarian", null },
{ "it", "it", "Italian", null },
{ "ja", "jp", "Japanese", null },
{ "ko", "kr", "Korean", null },
//{ "mg", "mg", "Malagasy", null },
{ "nl", "nl", "Dutch", null },
{ "nb", "no", "Norwegian Bokmaal", null },
{ "pl", "pl", "Polish", null },
{ "pt", "pt", "Portuguese", null },
{ "pt_BR", "br", "Portuguese", "Brazil" },
{ "ro", "ro", "Romanian", null },
{ "ru", "ru", "Russian", null },
{ "sk", "sk", "Slovak", null },
{ "sv", "se", "Swedish", null },
{ "tr", "tr", "Turkish", null },
{ "uk", "ua", "Ukrainian", null },
{ "vi", "vn", "Vietnamese", null },
{ "zh", "cn", "Chinese", null },
//{ "zh_TW", "tw", "Chinese", "Taiwan" },
{ "xx", "a1", "Debug: Find untagged strings", null },
};
/**
* Standalone (app context) only.
* Copied from ConfigUIHelper.
* @return HTML
* @since 0.9.27
*/
public static String getLangSettings(I2PAppContext ctx) {
String clang = Translate.getLanguage(ctx);
String current = clang;
String country = Translate.getCountry(ctx);
if (country != null && country.length() > 0)
current += '_' + country;
// find best match
boolean found = false;
for (int i = 0; i < langs.length; i++) {
if (langs[i][0].equals(current)) {
found = true;
break;
}
}
if (!found) {
if (country != null && country.length() > 0) {
current = clang;
for (int i = 0; i < langs.length; i++) {
if (langs[i][0].equals(current)) {
found = true;
break;
}
}
}
if (!found)
current = "en";
}
StringBuilder buf = new StringBuilder(512);
buf.append("<select name=\"lang\">\n");
for (int i = 0; i < langs.length; i++) {
String lang = langs[i][0];
if (lang.equals("xx") && !isAdvanced())
continue;
buf.append("<option ");
if (lang.equals(current))
buf.append(CHECKED);
buf.append("value=\"").append(lang).append("\">");
int under = lang.indexOf('_');
String slang = (under > 0) ? lang.substring(0, under) : lang;
// we don't actually have translations for these, see above
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(loc.getDisplayCountry(cur))
.append(')');
}
buf.append("</option>\n");
}
buf.append("</select>\n");
return buf.toString();
}
/** if necessary */
private static boolean isAdvanced() { return false; }
}