Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Организовать multilanguage (http://www.flasher.ru/forum/showthread.php?t=152249)

willis83 14.03.2011 17:04

Организовать multilanguage
 
Каким способом лучше организовать мультиязычность во флэше? Думал создать на язык по массиву и при переключении просто менять массив языка, выводя значения на нужном языке. Может есть способы поудобней?

Universe 14.03.2011 17:14

Мож просто вынести текст во внешний xml, а потом просто менять путь к нужному xml?

GBee 14.03.2011 17:53

А налету планируется язык менять или только при загрузке?

scarbo 14.03.2011 17:58

Создавайте файлы локализации, при выборе языка грузите нужный и подставляйте нужные значения.

willis83 14.03.2011 17:59

налету, хочу сделать где-нибудь в углу кнопочки в виде флагов стран, выбераешь нужный флаг, переинизиализируется сцена с нужным языком

Добавлено через 2 минуты
с xml идея тоже ничего, можно даже загнать всё в один файл, один тэг - одна строка, а там уже просто в доп параметрах значения на нужных языках....

GBee 14.03.2011 18:28

Я в хмле делал, загонял все в ресурсМенеджер. Причем хмл структурированный по окнам и страничкам. Правда у меня ощущение, что неправильно его использую, но удобно все равно.

Код AS3:

<?xml version="1.0" encoding="utf-8"?>
<locale language="en_US">
                <test>
                                <message><![CDATA[Это тест!]]></message>
                                <title><![CDATA[Title]]></title>
                </test>
                <system>
                        <date_format><![CDATA[DD/MM/YYYY]]></date_format>
                        <datetime_format><![CDATA[DD/MM/YYYY JJ:NN]]></datetime_format>
                        <datetimesec_format><![CDATA[DD/MM/YYYY JJ:NN:SS]]></datetimesec_format>
                </system>
                <common>
                                <ok><![CDATA[Ok]]></ok>
                                <yes><![CDATA[Yes]]></yes>
                                <no><![CDATA[No]]></no>
                                <cancel><![CDATA[Cancel]]></cancel>
                                <edit><![CDATA[Edit]]></edit>
и т.д.


Bgg 15.03.2011 00:21

Налету: при инциализации приложения собираете все ссылки на ТекстФилды, в которые уже забиты тексты по умолчанию. При переключении языка обходите все ТекстФилды, и меняете у них тексты, согласно таблице языков.

gloomyBrain 15.03.2011 00:33

Цитата:

При переключении языка обходите все ТекстФилды, и меняете у них тексты, согласно таблице языков
Или:
- Пишем класс-контейнер для языков. У класса есть статический массив с текущими словами, которые меняются в зависимости от выбранного языка. LangManager
- Пишем класс языко-зависимое-текстовое-поле. LangField В конструкторе этого класса подписываемся на события от LangManager'а. Менеджер языков нам сообщает об изменении языка и каждое текстовое поле (или еще что-то) само себя обновляет из статического массива

На мой взгляд, вариант с менеджером удобнее

expl 15.03.2011 00:42

Цитата:

Налету: при инциализации приложения собираете все ссылки на ТекстФилды, в которые уже забиты тексты по умолчанию. При переключении языка обходите все ТекстФилды, и меняете у них тексты, согласно таблице языков.
1. Как текст-филды идентифицировать (т.е. ага, вот еще один текстфилд нашли, а ключ локализации то у него какой)? - загонять на месте создания в хеш-справочник, а при удалении убирать отдуда?
2. Как быть, если текст является параметризированным?, ну т.е "У вашего юнита 10 опыта и 1 брони"

Цитата:

Или:
- Пишем класс-контейнер для языков. У класса есть статический массив с текущими словами, которые меняются в зависимости от выбранного языка. LangManager
- Пишем класс языко-зависимое-текстовое-поле. LangField В конструкторе этого класса подписываемся на события от LangManager'а. Менеджер языков нам сообщает об изменении языка и каждое текстовое поле (или еще что-то) само себя обновляет из статического массива

На мой взгляд, вариант с менеджером удобнее
Мне тоже кажется удобнее, только подписываться лучше в onAddedToStage и отписываться не забывать в onRemovedFromStage, по-тому как кто знает сколько когда и чего вы насоздаете и наудаляете.

На практике такое кто-нибудь делал?

Да, бывают же еще текстфилды, которые в зависимости от состояния приложения имеют разный текст, с ними как быть?

dimarik 15.03.2011 00:47

Цитата:

Сообщение от gloomyBrain (Сообщение 980521)
Или:
- Пишем класс-контейнер для языков. У класса есть статический массив с текущими словами, которые меняются в зависимости от выбранного языка. LangManager
- Пишем класс языко-зависимое-текстовое-поле. LangField В конструкторе этого класса подписываемся на события от LangManager'а. Менеджер языков нам сообщает об изменении языка и каждое текстовое поле (или еще что-то) само себя обновляет из статического массива

На мой взгляд, вариант с менеджером удобнее

Я так понимаю, что именно в конструкторе нужно подписаться.

GBee 15.03.2011 00:50

А чем плох существующий ResourceManager? При переключении языков генерит change.

dimarik 15.03.2011 01:06

Остальным. У него в конструкторе не подпишешься.

GBee 15.03.2011 01:13

Хм, не понял :о( Почему не подпишешся, чем он хуже самописного?

gloomyBrain 15.03.2011 01:16

Цитата:

Я так понимаю, что именно в конструкторе нужно подписаться.
Ну, конечно, где ж еще-то =)

dimarik 15.03.2011 01:18

Цитата:

Сообщение от GBee (Сообщение 980556)
Хм, не понял :о( Почему не подпишешся, чем он хуже самописного?

Ну так видится, например, гн. gloomyBrain, судя по предыдущему посту.

И ResourceManager — это тот, что из Flex framework?

gloomyBrain 15.03.2011 01:21

Понятно, что подписаться и запросить данные можно не только таким образом, но я стараюсь придерживаться pull модели работы с событиями
А как это видится гн. dimarik?

GBee 15.03.2011 01:24

Цитата:

И ResourceManager — это тот, что из Flex framework?
mx.resources.ResourceManager, ну да. В принципе можно по его подобию сделать, он синглтон.

dimarik 15.03.2011 01:27

Гн. Dimarik это уже видел не раз. Ему все параллельно =). Спасибо, что посочувствовали, гн. googleBrain.

incvizitor 15.03.2011 03:39

Цитата:

На практике такое кто-нибудь делал?
Делал, похоже на то что говорил глуми-брэйн. Только надо учитывать что на разных лэнгуиджах, слова разной длинны. Не верится, но на практике создало уйму проблем.

И еще. Есть например галерея картинок, к каждой подпись. А на одном из языков её нет, что с ней делать? Я предлагал что бы в таком случае выбирал русский, но со мной не согласились. Сказали что картинка должна удалятся. При чем это может произойти в момент когда картинки твинятся...

willis83 15.03.2011 11:21

С переинизиализацией я решил не мучаться, и выбор языка будет при старте флэшки, таким образом отваливается много проблем, не надо расширять базовый класс текстфилда, делать мэнеджеры. А те кто во время просмотра флэшки вдруг будет осознавать что лучше было бы на другом языке... его проблемы )

incvizitor 15.03.2011 12:35

Цитата:

А те кто во время просмотра флэшки вдруг будет осознавать что лучше было бы на другом языке... его проблемы )
Ну в принципе, логично. Однако Вам это могут как требование предъявить.

Gaen 15.03.2011 21:57

Я для подобной задачи использовал подход, при котором языкозависимые компоненты имеют некий метод setLanguage. Каждый такой компонент знает все о своих детях, отслеживает их состояния, знает кто из них текстовые поля, а кто - дочерние компоненты. Для полей берется новое значение из словаря на нужном языке, а у дочерних компонентов, соответственно, вызывается тот же setLanguage, чтобы они сами парились со своими детьми.
Т.е. юзер нажимает на кнопочку смены языка, событие доходит до Объекта, Принимающего Решения, и он вызывает setLanguage у Самого Главного Контейнера, откуда вызовы передаются вниз по иерархии дисплейлиста.

dimarik 17.03.2011 23:10

Цитата:

Сообщение от incvizitor (Сообщение 980602)
И еще. Есть например галерея картинок, к каждой подпись. А на одном из языков её нет, что с ней делать? Я предлагал что бы в таком случае выбирал русский, но со мной не согласились. Сказали что картинка должна удалятся.

Я организовываю локали в виде дерева. Т.е. дефолтная локаль побеждает и пользователь сможет увидеть картинку. Очень рекомендую ознакомиться с language, country и variant. Заодно покрасьте забор загляните в i18n.


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

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