PDA

Просмотр полной версии : Кто-нибудь работал с Locale?


walch
28.08.2008, 17:11
По описанию в справке получается отличный класс который даже умеет автоматически заменять тексты после смены языка. Но при попытке им воспользоваться возникла проблема...


import fl.lang.Locale;

Locale.addXMLPath("ru", "locale/lang_ru.xml");
Locale.addXMLPath("en", "locale/lang_en.xml");

// Включаем автозамену при загрузке XML-файла с языком
Locale.autoReplace = true;

// Добавляем текстовое поле в список тех которые надо автозаменять
Locale.addDelayedInstance(txt, "IDS_STR");

// Грузим язык
Locale.loadLanguageXML("ru");


Всё срабатывает отлично - в поле появляется текст на русском.

Добавим 2 кнопки. Описывать их код не буду, так как он не имеет значения, а место занимает.
Одна кнопка делает - Locale.loadLanguageXML("en");
Другая, соответственно - Locale.loadLanguageXML("ru");

Так вот. Если нажать на кнопку которая грузит английский, то текст в поле поменяется! Но вот обратно на русский уже нет!

Соответственно, если загрузить сначала "en", то переключение стработает один раз на "ru", а обратно - нет.

Кто-нибудь сталкивался?

P.S. Похоже что замена происходит только при первой реальной заргузке файла. На второй поптыке он не грузится с сервера, так как уже есть в памяти (хотя все события отрабатывают корректно).

PainKiller
16.09.2011, 20:41
Тоже столкнулся с этой проблемой :-)

Добавлено через 17 минут
Но у меня все еще хуже - сделал так что язык меняется по комбобоксу. Привожу только относящийся к делу код:

languageCombobox.addEventListener (Event.CHANGE, languageSelected);


public function languageSelected (e:Event):void
{
if (languageCombobox.selectedItem.data == "RUSSIAN")
{
GameSettings.setLANGUAGE ("RUSSIAN");
trace (GameSettings.LANGUAGE);
Locale.autoReplace = true;
Locale.addXMLPath("ru", "ru/Cosmosarcada_ru.xml");
Locale.loadLanguageXML("ru");
}
else if (languageCombobox.selectedItem.data == "ENGLISH")
{
GameSettings.setLANGUAGE ("ENGLISH");
trace (GameSettings.LANGUAGE);
Locale.autoReplace = true;
Locale.addXMLPath("en", "en/Cosmosarcada_en.xml");
Locale.loadLanguageXML("en");
}
}

Работает как то странно, по умолчанию стоит русский, на английский переключается нормально, но назад на русский либо не переключается либо переключается частично (отдельные поля меняются и все)

Добавлено через 25 минут
И кстати еще вопрос - кто нибудь пробовал локализовать компоненты, например, радиобаттоны где текст в лейбле прописан, а то панель строки позволяет работать только с динамическими текстовыми полями

-De-
16.09.2011, 22:35
У Locale есть нехилый минус- тексты только статические.

PainKiller
16.09.2011, 22:45
У Locale есть нехилый минус- тексты только статические.
Не понял, какие статические? Локализовать через локале можно только динамический текст

-De-
16.09.2011, 23:16
"на вас одет шлем и телескоуп", "Осталось набрать 10 очков" - вот такие им не локализовать.

nOobCrafter
17.09.2011, 01:23
com.nunorosa.locale.LocaleManager
рекомендую к изучению, просто и удобно.

PainKiller
17.09.2011, 02:07
com.nunorosa.locale.LocaleManager
рекомендую к изучению, просто и удобно.

Можно поподробней, где про про это почитать? А то поиск в яндексе не дал результатов. И потом если это AS1 или 2 - то это не вариант, т.к. весь проект на трешке.

nOobCrafter
17.09.2011, 14:31
зато гугля сразу же дала нужный результат в первой строке:
http://code.google.com/p/as3localelibrary/wiki/DeveloperGuide

PainKiller
17.09.2011, 21:41
Спасибо, попробую его. Как минус, похоже, что XMLники сделанные флешем, к этому классу не подойдут. И кстати разобрался как локализовать компоненты. Что то вроде этого:

if (GameSettings.LANGUAGE == "RUSSIAN")
{
radioButton.label = Locale.loadString("IDS_RADIOBUTTON_TXT"); // возвращает строку на текущем языке
}

но придется много писать кода ручками :-(