Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.12.2010, 12:24
armagon вне форума Посмотреть профиль Отправить личное сообщение для armagon Найти все сообщения от armagon
  № 1  
Ответить с цитированием
armagon

Регистрация: Dec 2010
Сообщений: 4
По умолчанию Локализация строк и кнопок во flash

Начал локализацию приложения на флэше используя Strings, но столкнулся с рядом проблем. Возникли сложности с переводом состояний Button.

Кто-нибудь сталкивался с подобными проблемами? Как кто локализует приложения на флэше?

Заранее спасибо.

Старый 22.12.2010, 13:37
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 2  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Цитата:
Кто-нибудь сталкивался с подобными проблемами?
Вы бы сначала проблемы описали.
Цитата:
Как кто локализует приложения на флэше?
Если в кратце, то есть некий объект с полями для строк. Поля заполняются из файлов локали. Когда компоненту нужна строка, он запрашивает ее у этого объекта. При смене локали объект шлет событие и компоненты заново считывают строки.

Старый 22.12.2010, 13:44
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 3  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Кстати, важно не забыть про то, что в разных языках под текст требуется разный размер поля. Там, где на английском стоят 3-5 букв, на русском может оказаться в 2-3 раза больше. Классический пример - кнопка с надписью "load".

Старый 22.12.2010, 14:00
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Это уже забота компонента – правильно отрисоваться.

Старый 22.12.2010, 14:04
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 5  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
и как он отрисуется правильно, если он кнопка 50х30 по дизайну, а в него пихают "Сохранить игру"?

Старый 22.12.2010, 14:11
Nemez вне форума Посмотреть профиль Отправить личное сообщение для Nemez Найти все сообщения от Nemez
  № 6  
Ответить с цитированием
Nemez
 
Аватар для Nemez

Регистрация: Jun 2010
Сообщений: 189
В кнопке Button должно быть динамическое текстовое поле, в котором написано, что кнопка делает. Значение в это поле ставится из языкового XML, в зависимости от выбранного языка. На переключателе языка должен быть эвент на функцию перерисовки.

Старый 22.12.2010, 14:24
armagon вне форума Посмотреть профиль Отправить личное сообщение для armagon Найти все сообщения от armagon
  № 7  
Ответить с цитированием
armagon

Регистрация: Dec 2010
Сообщений: 4
Спасибо что откликнулись.

Цитата:
Сообщение от alatar Посмотреть сообщение
Вы бы сначала проблемы описали.

Если в кратце, то есть некий объект с полями для строк. Поля заполняются из файлов локали. Когда компоненту нужна строка, он запрашивает ее у этого объекта. При смене локали объект шлет событие и компоненты заново считывают строки.
Я использую панель Strings в Flash CS5. В ней создаю идентификаторы для двух языков - русского и английского. После чего назначаю эти идентификаторы (Assign) прямо в среде Flash соответствующим DynamicText объектам. Всё цепляется верно. После этого я экспортирую swc файл и линкую его в мой проект, где и использую MovieClip хранящиеся в swc. Выдает синтаксическую ошибку в классе отнаследованном от Button. А посмотреть код этой кнопки не удается...

В проект я добавил следующие строки:
Код AS3:
Locale.addXMLPath("en", "../assets/en/assets_en.xml");			
Locale.addXMLPath("ru", "../assets/ru/assets_ru.xml");
Locale.loadLanguageXML("ru");
В результате русский язык действительно устанавливается во всех DynamicText.

Проблема возникает, когда я пытаюсь создать Button, где состояния Common и Hover это DynamicText. СS5 отказывается экспортировать swc созданный подобным образом. Жалуется на 1086: Syntax Error: Expecting Semicolon Before Leftbracket. Понять в чем дело не удалось. В итоге не могу во flash локализовать кнопку.

Единственный "вывернутый" выход - локализовать кнопки уже в коде, но это не гибкий подход... Думаю должен быть нормальный метод делать локализуемые кнопки.

Добавлено через 2 минуты
Цитата:
Сообщение от Nemez Посмотреть сообщение
В кнопке Button должно быть динамическое текстовое поле, в котором написано, что кнопка делает. Значение в это поле ставится из языкового XML, в зависимости от выбранного языка. На переключателе языка должен быть эвент на функцию перерисовки.
По непонятной причине Flash CS5 отказывается экспортировать swc, если создать Button с одним DynamicText в Common и одним DynamicText в Hover, которым назначили идентификатор из Strings...

Добавлено через 5 минут
Цитата:
Сообщение от mikhailk Посмотреть сообщение
и как он отрисуется правильно, если он кнопка 50х30 по дизайну, а в него пихают "Сохранить игру"?
Всё верно. Стараюсь объекты делать больше. Обычно с запасом процентов на 50-70. Иначе текст не вместится в объект. Хотя возможно есть какие-то методы автоматического изменения размера, но не слышал о таких.


Последний раз редактировалось armagon; 22.12.2010 в 14:29.
Старый 22.12.2010, 14:35
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 8  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Locale, по-моему, гугно. Лучше своё сделать. Всё равно меняющиеся строки, где цифры, например, им не поставить. По-моему ещё была какая-то неприятная особенность.
Кстати, когда будете вставлять тексты типа "убито бобров 2 из 3, спасено деревьев 2", то учтите, что в разных языках оно может быть в разном порядке (и разбираться с этим надо локали).
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.


Последний раз редактировалось -De-; 22.12.2010 в 14:53.
Старый 22.12.2010, 14:48
P_A вне форума Посмотреть профиль Отправить личное сообщение для P_A Найти все сообщения от P_A
  № 9  
Ответить с цитированием
P_A

Регистрация: Dec 2010
Сообщений: 9
уверен, что есть и другие способы, но я как-то по привычке уже использую свой старый способ:

Создаем следующий класс

Код AS3:
package /* имя пакета */
{
	public class LANGUAGE
	{
		public static var words:Object = {};
	}
}
Создаем класс для загрузки языкового пакета

Код AS3:
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));	
		}
 
	}
}
Пример языкового пакета en.html
Код:
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!
использование внутри главного класса
Код AS3:
var l:LoadLang;
l=new LoadLang("en");
 
l.addEventListener(LoadLang.LANGLOADED,Init);
язык прогружаем в конструкторе, а все остальное делаем уже в функции Init

Теперь из любого класса мы можем получить строку, содержащую текст на выбранном языке в
Код AS3:
LANGUAGE.words.ИМЯ_ПЕРЕМЕННОЙ_В_ЯЗЫКОВОМ_ПАКЕТЕ

Старый 22.12.2010, 14:52
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 10  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Цитата:
Хотя возможно есть какие-то методы автоматического изменения размера, но не слышал о таких.
Если берете готовые компоненты - там это есть.
Можно и самому сделать

Подложку режете на три части (если кнопка растет только в одном направлении) или на 9 частей (если в двух), потом пишете собственный класс кнопки, который по содержимому вычисляет размер центральной части, растаскивает углы и скалит изображения между ними. Всех дел на 20 минут. Зато получите свой собственный базовый класс кнопок с абсолютно предсказуемым поведением и возможностью задать там столько состояний, сколько захочется - хоть три, хоть двадцать.

Создать новую тему Ответ Часовой пояс GMT +4, время: 15:49.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 15:49.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.