![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2010
Сообщений: 4
|
Начал локализацию приложения на флэше используя Strings, но столкнулся с рядом проблем. Возникли сложности с переводом состояний Button.
Кто-нибудь сталкивался с подобными проблемами? Как кто локализует приложения на флэше? Заранее спасибо. |
|
|||||
|
Цитата:
Цитата:
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Кстати, важно не забыть про то, что в разных языках под текст требуется разный размер поля. Там, где на английском стоят 3-5 букв, на русском может оказаться в 2-3 раза больше. Классический пример - кнопка с надписью "load".
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
и как он отрисуется правильно, если он кнопка 50х30 по дизайну, а в него пихают "Сохранить игру"?
![]() |
|
|||||
|
Регистрация: Jun 2010
Сообщений: 189
|
В кнопке Button должно быть динамическое текстовое поле, в котором написано, что кнопка делает. Значение в это поле ставится из языкового XML, в зависимости от выбранного языка. На переключателе языка должен быть эвент на функцию перерисовки.
|
|
|||||
|
Регистрация: Dec 2010
Сообщений: 4
|
Спасибо что откликнулись.
Цитата:
В проект я добавил следующие строки: Locale.addXMLPath("en", "../assets/en/assets_en.xml"); Locale.addXMLPath("ru", "../assets/ru/assets_ru.xml"); Locale.loadLanguageXML("ru"); Проблема возникает, когда я пытаюсь создать Button, где состояния Common и Hover это DynamicText. СS5 отказывается экспортировать swc созданный подобным образом. Жалуется на 1086: Syntax Error: Expecting Semicolon Before Leftbracket. Понять в чем дело не удалось. В итоге не могу во flash локализовать кнопку. Единственный "вывернутый" выход - локализовать кнопки уже в коде, но это не гибкий подход... Думаю должен быть нормальный метод делать локализуемые кнопки. Добавлено через 2 минуты Цитата:
Добавлено через 5 минут Цитата:
Хотя возможно есть какие-то методы автоматического изменения размера, но не слышал о таких.Последний раз редактировалось armagon; 22.12.2010 в 14:29. |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Locale, по-моему, гугно. Лучше своё сделать. Всё равно меняющиеся строки, где цифры, например, им не поставить. По-моему ещё была какая-то неприятная особенность.
Кстати, когда будете вставлять тексты типа "убито бобров 2 из 3, спасено деревьев 2", то учтите, что в разных языках оно может быть в разном порядке (и разбираться с этим надо локали).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 22.12.2010 в 14:53. |
|
|||||
|
Регистрация: Dec 2010
Сообщений: 9
|
уверен, что есть и другие способы, но я как-то по привычке уже использую свой старый способ:
Создаем следующий класс package /* имя пакета */ { public class LANGUAGE { public static var words:Object = {}; } } package /*имя пакета*/ { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; public class LoadLang extends Sprite { public static var LANGLOADED:String="Language File Loaded"; private var LANG:String; public function LoadLang(lang:String) { LANG=lang; var loader:URLLoader = new URLLoader(new URLRequest("/*папка с языковыми пакетами*//"+lang+".html")); loader.addEventListener(Event.COMPLETE,completeHandler); LANGUAGE.words.LNAME=lang; } private function completeHandler(event:Event):void { var loader2:URLLoader = URLLoader(event.target); var newString:RegExp = /\r\n/g; loader2.data=loader2.data.replace(newString, "&"); LANGUAGE.words = new URLVariables(loader2.data); LANGUAGE.words.LNAME=LANG; dispatchEvent(new Event(LoadLang.LANGLOADED)); } } } MIN=Min MAX=Max SOUNDSETTINGS=Sound Settings MUTEALL=Mute All BGMUSIC=Background Music EFFECTS=Effects GAMESETTINGS=Game Settings PLAYWITHANIM=Play with Animation CLOSE=Close WAR=Attention, in case of unfinished round, all current stakes will be lost. DOYOUREALY=Do you really want to quit? YES=Yes NO=No NOTENOUGHTMONEY=Not enought money! язык прогружаем в конструкторе, а все остальное делаем уже в функции Init Теперь из любого класса мы можем получить строку, содержащую текст на выбранном языке в |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Цитата:
Можно и самому сделать Подложку режете на три части (если кнопка растет только в одном направлении) или на 9 частей (если в двух), потом пишете собственный класс кнопки, который по содержимому вычисляет размер центральной части, растаскивает углы и скалит изображения между ними. Всех дел на 20 минут. Зато получите свой собственный базовый класс кнопок с абсолютно предсказуемым поведением и возможностью задать там столько состояний, сколько захочется - хоть три, хоть двадцать. |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:15. |
|
|
« Предыдущая тема | Следующая тема » |
|
|