![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2011
Сообщений: 19
|
Всем привет.
Подскажите как проще и удобнее делать интернационализацию в приложении. Т.е. возможность выбора языка для вывода сообщений и надписей. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 19
|
ооо. а можно по подробнее? какие такие пакеты? package? по словам "языковой пакет actionscript" гугл какую то ерунду выдает...
|
|
|||||
|
Ну, например создать какой-то класс, на подобие абстрактной фабрики, который будет принимать для инициализации ксласс с каким-то интерфейсом, например
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(); } } } и два примера языковых пакетов: package language { public class RusPack implements ILang { private var _list:Array = ["главное меню", "выбор языка"]; public function getList():Array { return _list; } } } package language { public class EngPack implements ILang { private var _list:Array = ["main menu", "select language"]; public function getList():Array { return _list; } } } LangPack.setLanguage(new RusPack()); _mainMenu.text = LangPack.getList()[0]; // если передан русский пакет, будет выдавать надпись "главное меню", если английский "main menu" Для смены языка будет нужно опять передать в метод setLanguage новый экземпляр ну или даже так, для наглядности Последний раз редактировалось caseyryan; 13.02.2013 в 10:27. |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 19
|
огромное спасибо)
|
|
|||||
|
Поищите по ключевым словам as3 i18n.
Вот, например, первое попавшееся.
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
Более использующийся термин "локализация".
http://www.flasher.ru/forum/showthre...E7%E0%F6%E8%FF
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
|
|||||
|
Это все-таки несколько разные термины. И ТС выбрал верный из них.
Цитата:
__________________
משיח לא בא משיח גם לא מטלפן |
|
|||||
|
Регистрация: 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;
}
}
или даже Меня устраивает.
__________________
мой пустой блог |
|
|||||
|
Цитата:
Хранить в масссиве? Получается из середины ставший лишним текст удалили - всё съехало. В Notepad++, вроде так и сделано, но есть же более человеческие способы У нас статическая локализация представлена txt-файлом(все языки в одном файле), в котором текст хранится в TSV(разделенные табом значения). TSV, потому что легко копипастить в Excel(по неясным причинам в других форматах переводчики работать не умеют) Т.к. формат текстовый - он легко мержится Пробовали сразу хранить в xls, но ручной мержинг доводит до белого коленья Представляет текст типа: По этому txt-файлу скриптом (у нас на haXe, но можно хоть на Haskell) генерятся: - по xml-файлу на язык - as3-файл Localization.as, с набором методов(утрировано): 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.menuName() - и всё! Если ключ пропал - компилятор скажет. При отдаче переводчикам содержимое txt-файла копируется в Excel Сам файл (т.к. TSV править мягко говоря неудобно) - редактируется в самопальном редакторе на C# (подходящий несамопальный не нагуглили). Внешне это похоже на правку таблиц в том же Excel. При сохранении автоматом запускает скрипт, генерирующий xml и as. Эта схема, конечно, не претендует на единственно верную и удобную во всех случаях, но в нашей практике ничего удобнее родить не смогли. |
![]() |
![]() |
Часовой пояс GMT +4, время: 18:08. |
|
|
« Предыдущая тема | Следующая тема » |
|
|