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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 19.10.2017, 00:43
Партизан вне форума Посмотреть профиль Отправить личное сообщение для Партизан Найти все сообщения от Партизан
  № 34  
Ответить с цитированием
Партизан
 
Аватар для Партизан

блогер
Регистрация: Nov 2007
Адрес: Almaty, Moscow
Сообщений: 396
Записей в блоге: 5
Отправить сообщение для Партизан с помощью Skype™
Тут уже пару страниц обсуждений, выложу для разнообразия код, может кому пригодится... Как видите, кода меньше чем обсуждений, был написан хз когда, под мультиязычный проект с рантаймом, с тех пор мало что меняю.
Код AS3:
{
	import flash.display.Stage;
	/**
	 * ...
	 * @author Mikhail Klabukov
	 */
	[Event(name="language_change", type="LanguageEvent")]
	public class Language 
	{
		private static var _stage:Stage;
		private static var _self:Language;
 
		public static const RU:String = 'ru';
		public static const EN:String = 'en';
		public static const KZ:String = 'kz';
		static public const TR:String = "tr";
 
		public static var CUR:String = 'ru';
 
 
		public function Language() 
		{
 
		}
		public static function setStage(stage:Stage):void {
			_stage = stage;
		}
 
		public static function setLanguage(lang:String):void {
			CUR = lang;
			_stage.dispatchEvent(new LanguageEvent(LanguageEvent.LANGUAGE_CHANGE, CUR));
		}
	}
 
}
Код AS3:
package  
{
	import flash.events.Event;
 
	/**
	 * ...
	 * @author Mikhail Klabukov
	 */
	public class LanguageEvent extends Event 
	{
		public static const LANGUAGE_CHANGE:String = 'language_change';
		private var _language:String;
 
		public function LanguageEvent(type:String, language:String, bubbles:Boolean = false, cancelable:Boolean = false) 
		{
			super(type, bubbles, cancelable);
			_language = language;
		}
 
		public function get language():String 
		{
			return _language;
		}
 
	}
 
}
Код AS3:
package
{
	import avmplus.getQualifiedClassName;
	import flash.display.Stage;
	import flash.utils.Dictionary;
	import starling.events.Event;
 
	/**
	 * ...
	 * @author Mikhail Klabukov (xpochta@gmail.com)
	 */
	public class Translator
	{
		[Embed(source = "../lib/translations.xml", mimeType = "application/octet-stream")]
		private static const LANGXML:Class;
 
		public static var _self:Translator;
		private var _xml:XML;
		private var _stage:Stage;
		private var _clients:Dictionary = new Dictionary(true);
 
		public function Translator(stage:Stage)
		{
 
			_stage = stage;
			_self = this;
			_xml = XML(new LANGXML());
			stage.addEventListener(LanguageEvent.LANGUAGE_CHANGE, translate)
		}
 
		private function translate(e:LanguageEvent):void
		{
			for (var i:Object in _clients)
			{
				var obj:Object = _clients[i];
				for (var j:* in obj) 
				{
					i[j] = _self.getTranslationFromXML(obj[j]);
				}			
 
			}
		}
 
		static public function getTranslation(stringId:String, obj:* = null, propertyName:String = 'text'):void
		{
			var str:String = _self.getTranslationFromXML(stringId);
			if (str == '')
			{
				trace('StringId:', stringId, 'is empty!');
			}
			if (obj != null)
			{
				var o:Object;
				if ( _self._clients[obj] != null || _self._clients[obj] != undefined){
					o = _self._clients[obj];
				}else{
					o = {};
				}
				o[propertyName] = stringId;
				_self._clients[obj] = o;
				obj[propertyName] = str;
				obj.addEventListener(Event.REMOVED_FROM_STAGE,onRemove)
			}
		}
 
		static private function onRemove(e:Event):void 
		{
			e.currentTarget.removeEventListener(Event.REMOVED_FROM_STAGE, onRemove);
			delete _self._clients[e.currentTarget];
		}
 
		public function getTranslationFromXML(id:String, lang:String = null):String
		{
			return _xml.string.(@id == id).attribute(checkLang(lang));
		}
 
		private function checkLang(lang:String):String
		{
			if (lang == null)
				lang = Language.CUR;
			return lang;
		}
 
	}
 
}

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

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

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


 


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


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