![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Oct 2005
Сообщений: 6
|
Есть веб-приложение (ASP.NET, C#, .NET 2002), в котором отображается граф. редактор на Flash (MX2004, 7.0). Flash организован в виде FLP-проекта, в главную SWF погружаются дочерние SWF. Нужно сделать локализацию Flash-надписей (EN/DE/RU/...).
Хочу использовать панель Strings и галку "Insert ActionScript for automatic language detection" для автоматической локализации. Проблем возникло три: 1. флеш определяет текущий язык через переменную System.capabilities.language (язык операционной системы), а хотелось текущую культуру передавать через ASPX на стороне клиента, независимо от языка ОС 2. архитектура ВСЕГО проекта такова, что все SWF паблишатся не в текущую для себя директорию (там, где находятся FLA), а в отдельную папку (..\Web\Flash), где их юзают ASPX-страницы. Флеш же ищет файлы ресурсов по адресу, наподобие: \Fla_Directory\de\SwfName_de.xml и не находит файл: \Web\Flash\de\SwfName_de.xml Это видно исходя из трейсов, которые я добавил в метод initialize() класса mx.lang.Locale, который Флеш использует для локализации: C:\Documents and Settings\<<My profile>>\Local Settings\Application Data\Macromedia\Flash MX 2004\en\Configuration\Classes\mx\lang\Locale.as 3. SWF для локализации несколько, а у СИСТЕМНОГО (править его нежелательно) класса mx.lang.Locale все статическое - поля и функции. Поэтому, поле класса Locale.xmlMap конечно позволяет хранить таблицу путей до НЕСКОЛЬКИХ XML с локализацией. Но в методе initialize() используется такая запись: xmlDoc.load(xmlMap[langCode][0]) - что некорректно, т.к. индекс (0,1,2...) должен определяться исходя из установленного поля Locale.flaName. ----------------------- Проблема_1 решена: Сделан класс (и включен в проект) MyLocale, отнаследованный от mx.lang.Locale. В нем добавлено свойство для установки извне поля xmlLang (из ASPX передается значение Request.languages[0] через JavaScript Флешу). Далее, в первом кадре локализуемой SWF вызывается Locale.initialize() и т.о. Флеш подгружает SWF заданного языка. (PS: пробовал вызывать MyLocale.initialize() - но это не сработало. Поэтому пришлось поступить "нелогично" - видно это работает, т.к. MyLocale наследник Locale и он может устанавливать статическое поле родителя). Проблема_2: В том же классе MyLocale сделал метод CorrectPaths(), который корректирует поле xmlMap (устанавливает корректные пути). Но это не работает, т.к. СНАЧАЛА (я смотрел скомпилированную SWF через SwfDecompiler) Флеш пытается загружать ХМL по неправильному пути (у него это не получается и он выдает бесконечные ошибки в окно Output - "Не могу загрузить файл по заданному URL"), потом срабатывает мой метод CorrectPaths(), пути исправляются, и Флеш загружает наконец XML по корректному пути. Но видимо Флешу настолько "поплохело" после предыдущих ошибок, что он не имеет в себе силы отобразить надписи с данными из XML по "правильным" путям. (Кстати, этот трюк с исправлением путей работает в случае с одной SWF - тоже выдаются бесконечные ошибки в Output, но после исправления пути, Флеш загружает хороший ХМL и отображает то, что надо). Проблема_3 - решения нет. Static поля, ничего не поделаешь :-( (хочется переписать всю локализацию самостоятельно, в крайнем случае взять за основу класс Locale..., но чувствую, что геморрой еще тот...). Кто-нибудь может помочь? А опубликовать работающий пример (1 FLP, 2 SWF, паблиш "не в корень", установка культуры извне) было бы совсем супер. PS: Сорри, за "многабукф" ;-), но ИМХО лучше написать подробно, чем публиковать топик с темой "Памагите!!!" и вопросом "У меня ничего не работает" :-D Последний раз редактировалось berk; 28.10.2005 в 02:32. |
![]() |
Часовой пояс GMT +4, время: 08:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|