:
Locale.getDefault().toString()
我得到 zh_tw
我将这个发送到joomla网站并设置如下语言:
$lang = &JFactory::getLanguage();
$lang->setLanguage( $_GET['lang'] );
$lang->load();
但该网站需要以下格式 zh-TW
看来如果它不是那种确切的格式,语言就不会改变。 java或php中的某个函数是否会为我转换格式?
我意识到我可以像这样写自己的方法:
public static String convertLanguageToJoomlaFormat(String lang) {
String[] parts = lang.split("_");
if(parts.length ==2)
return parts[0]+"-"+parts[1].toUpperCase();
return lang;
}
但不确定是否存在特定语言格式发生变化的情况。
答案 0 :(得分:4)
根据Java API文档,Locale.toString()是:
Getter的程序化名称 整个语言环境,用语言, 国家和变种分开 下划线。语言总是较低 案例,国家总是上层 案件。如果语言缺失,那么 字符串将以下划线开头。如果 语言和国家/地区字段 缺少,此功能将返回 空字符串,即使是变体 字段填写(你不能有 只有变种的语言环境 - 变体必须伴随有效 语言或国家代码)。例子: “en”,“de_DE”,“_ GB”,“en_US_WIN”, “de__POSIX”,“fr__MAC”
Joomla 1.5声称将IETF RFC3066用于区域设置名称:http://tools.ietf.org/html/rfc3066,但实际上它始终使用标识符的语言和国家/地区代码部分,如[en-GB]。
当Java Locale没有国家/地区部分时会出现问题。在这种情况下,您可以使用大写版本的语言代码作为国家代码使用“hack”:
String[] tokens = locale.toString().split("_");
if (tokens.length >= 2 && tokens[1].length() == 2) {
joomlaName = tokens[0]+"-"+tokens[1];
} else {
joomlaName = tokens[0]+"-"+tokens[0].toUpperCase();
}