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

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

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

Регистрация: Jun 2011
Сообщений: 19
Question Интернационализация

Всем привет.

Подскажите как проще и удобнее делать интернационализацию в приложении. Т.е. возможность выбора языка для вывода сообщений и надписей.

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
как обычно. Делать языковые пакеты, одинаковые по структуре, но с разным переводом, при выборе языка просто указывать языковой пакет, и оттуда будут браться все надписи

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

Регистрация: Jun 2011
Сообщений: 19
ооо. а можно по подробнее? какие такие пакеты? package? по словам "языковой пакет actionscript" гугл какую то ерунду выдает...

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

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ну, например создать какой-то класс, на подобие абстрактной фабрики, который будет принимать для инициализации ксласс с каким-то интерфейсом, например
Код AS3:
package language {
 
	public class LangPack {
 
		private static var _langPack:ILang;
 
		public static function setLanguage(langPack:ILang):void {
			_langPack = langPack;
		}
		public static function getList():Array {
			if (!_langPack) throw "сначала передайте языковой пакет через setLanguage()";
			return _langPack.getList();
		}
	}
 
}
сам интерфейс
Код AS3:
package language {
 
	public interface ILang  {
		function getList():Array;
	}
}
и два примера языковых пакетов:
Код AS3:
package language {
 
	public class RusPack implements ILang {
 
		private var _list:Array = ["главное меню", "выбор языка"];
 
		public function getList():Array {
			return _list;
		}
 
	}
 
}
и английский
Код AS3:
package language {
 
	public class EngPack implements ILang {
 
		private var _list:Array = ["main menu", "select language"];
 
		public function getList():Array {
			return _list;
		}
 
	}
 
}
потом где-то инициализируем пакет
Код AS3:
LangPack.setLanguage(new RusPack());
_mainMenu.text = LangPack.getList()[0]; // если передан русский пакет, будет выдавать надпись "главное меню", если английский "main menu"
Ну, типа того, надеюсь идея ясна
Для смены языка будет нужно опять передать в метод setLanguage новый экземпляр
Код AS3:
LangPack.setLanguage(new EngPack());
ну или даже так, для наглядности
Код AS3:
LangPack.setLanguage(new EngPack() as ILang);


Последний раз редактировалось caseyryan; 13.02.2013 в 10:27.
Старый 13.02.2013, 10:23
stasuss вне форума Посмотреть профиль Отправить личное сообщение для stasuss Найти все сообщения от stasuss
  № 5  
Ответить с цитированием
stasuss
 
Аватар для stasuss

Регистрация: Jun 2011
Сообщений: 19
огромное спасибо)

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Поищите по ключевым словам as3 i18n.
Вот, например, первое попавшееся.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.02.2013, 16:54
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 7  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
Более использующийся термин "локализация".
http://www.flasher.ru/forum/showthre...E7%E0%F6%E8%FF
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Это все-таки несколько разные термины. И ТС выбрал верный из них.
Цитата:
Internationalization is the process of designing a software application so that it can be adapted to various languages and regions without engineering changes. Localization is the process of adapting internationalized software for a specific region or language by adding locale-specific components and translating text.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.02.2013, 17:17
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 9  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
Я. например, не оперирую большими текстами для перевода, поэтому у себя сделал очень просто. У меня есть translations.xml с такой структурой:
Код:
<translations>
	<t ru="Подтвердить" en="Confirm" />
	<t ru="Отмена" en="Cancel" />
	<t ru="Вы действительно хотите удалить это сохранение?" en="Delete savegame?" />
	<t ru="Инвентарь" en="Inventory" />
	<t ru="Купить" en="Buy" />
	<t ru="Продать" en="Sell" />
	<t ru="Сбросить" en="Reset" />
</translations>
Есть вот такая функция пакета:
Код:
package engine {
	public function t(str:String):String {
		if (Main.DEFAULT_LANG == Main.curLang) return str;
		var list:XMLList = Main.translations.t.(@[Main.DEFAULT_LANG] == str);
		return list.length()?list[0].@[Main.curLang]:str; 
	}
}
и в коде мне остается только добавить что-нибудь типа:
Код AS3:
btnReset.label = t("Сбросить");
или даже
Код AS3:
btnReset.label = t(btnReset.label);
Меня устраивает.
__________________
мой пустой блог

Старый 13.02.2013, 21:50
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 10  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
_mainMenu.text = LangPack.getList()[0];
Выбирать текст по индексу? 0_o
Хранить в масссиве? Получается из середины ставший лишним текст удалили - всё съехало.
В Notepad++, вроде так и сделано, но есть же более человеческие способы

У нас статическая локализация представлена txt-файлом(все языки в одном файле), в котором текст хранится в TSV(разделенные табом значения).
TSV, потому что легко копипастить в Excel(по неясным причинам в других форматах переводчики работать не умеют)
Т.к. формат текстовый - он легко мержится
Пробовали сразу хранить в xls, но ручной мержинг доводит до белого коленья
Представляет текст типа:
Код:
	ru	en
menuName	Меню	Menu
okButton	OK	OK
cancelButton	Отмена	Cancel
По этому txt-файлу скриптом (у нас на haXe, но можно хоть на Haskell) генерятся:
- по xml-файлу на язык
- as3-файл Localization.as, с набором методов(утрировано):
Код AS3:
public class Localization {
    private static _texts:Object;
    public static setParsedFromXmlTexts(texts:Object):void { _texts = texts }
    public static menuName():String { return _texts["menuName"] }
    public static okButton():String { return _texts["okButton"] }
    public static cancelButton():String { return _texts["cancelButton"] }
}
Если Localization.get("menuName") писать руками - начинаются бесконечные поиски описки, неиспользуемые ключи тяжело найти, постоянные перепроверки и вообще муторное занятие
А так - Localization.menuName() - и всё! Если ключ пропал - компилятор скажет.

При отдаче переводчикам содержимое txt-файла копируется в Excel
Сам файл (т.к. TSV править мягко говоря неудобно) - редактируется в самопальном редакторе на C# (подходящий несамопальный не нагуглили). Внешне это похоже на правку таблиц в том же Excel. При сохранении автоматом запускает скрипт, генерирующий xml и as.

Эта схема, конечно, не претендует на единственно верную и удобную во всех случаях, но в нашей практике ничего удобнее родить не смогли.

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

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

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


 


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


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