将java语言输出转换为Joomla语言输出

时间:2010-06-08 14:13:44

标签: java php joomla

如果我跑的话,在java中

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;
}

但不确定是否存在特定语言格式发生变化的情况。

1 个答案:

答案 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();
}