Преобразование вывода языка Java в вывод языка Joomla - PullRequest
2 голосов
/ 08 июня 2010

в 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 Ответ

4 голосов
/ 08 июня 2010

В соответствии с документами Java API Locale.toString () представляет собой:

Получатель для программного имени всей локали с языком, страной и вариантом, разделенными чертами.Язык всегда в нижнем регистре, а страна всегда в верхнем регистре.Если язык отсутствует, строка начинается с подчеркивания.Если поля языка и страны отсутствуют, эта функция вернет пустую строку, даже если поле варианта заполнено (у вас не может быть локали с одним вариантом - вариант должен сопровождаться действительным кодом языка или страны).Примеры: «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 нет части страны.В этом случае вы можете использовать «хак», используя код языка в верхнем регистре в качестве кода страны:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...