2010-06-08 121 views
2

在Java中,如果我跑:轉換java語言輸出到Joomla語言輸出

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

但我不確定是否有任何情況下,對特定語言的格式更改。

回答

4

根據Java API文檔Locale.toString()是:

返回一個適合的 整個語言環境的編程名稱,用語言, 國家和變量通過 下劃線分隔的。語言總是低於 的情況,而國家總是高於 的情況。如果缺少該語言,則 字符串將以下劃線開頭。如果 語言和國家領域 都不見了,這個函數會返回 空字符串,即使變異 字段填寫(不能有 區域,只需variant--的 變種必須陪有效的 語言或國家代碼)。例如: 「恩」, 「de_DE這個」, 「_GB」, 「en_US_WIN」, 「de__POSIX」, 「fr__MAC」

的Joomla 1.5要求使用IETF RFC3066的語言環境名稱:http://tools.ietf.org/html/rfc3066,但在現實中它總是使用標識符的語言和國家代碼部分,如[en-GB]。

Java語言環境沒有國家/地區部分時出現問題。在這種情況下,您可以使用大寫版本的語言代碼作爲國家代碼:'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(); 
}