Преамбула:
Для мультиязыкового приложения наверняка многие пользовались классом fl.lang.Locale с помощью которого в приложение подгружаются строковые ресурсы на нужном языке. Возникла необходимость аналогично строковым, сохранять и в последствии подгружать койкакие настройки приложения в зависимости от языка, например: имя дефолтного шрифта или имя метки кадра для фона главного экрана.
Проблема:
Использование различных настроек приложения в зависимости от языка.
Решение:
За основу взят все тот же класс fl.lang.Locale, т.к. обладает всем необходимым функционалом. Более того его можно было использовать для решения данной проблемы, но я отказался от него по 2-м причинам: 1. в проекте уже используется этот класс для подгрузки строковых, 2. модель ключ-значение превращает xml-"конфиг" в одну сплошную кучу.
И так, немного поработав напильником, появился класс (не претендующий на оригинальность или что то еще в этом духе) LocaleSettings (заранее прошу прощения за мусор в комментариях, остались от Locale).
Пример xml-я который кушает этот класс:
Пример использования:
Примечания:
Для мультиязыкового приложения наверняка многие пользовались классом fl.lang.Locale с помощью которого в приложение подгружаются строковые ресурсы на нужном языке. Возникла необходимость аналогично строковым, сохранять и в последствии подгружать койкакие настройки приложения в зависимости от языка, например: имя дефолтного шрифта или имя метки кадра для фона главного экрана.
Проблема:
Использование различных настроек приложения в зависимости от языка.
Решение:
За основу взят все тот же класс fl.lang.Locale, т.к. обладает всем необходимым функционалом. Более того его можно было использовать для решения данной проблемы, но я отказался от него по 2-м причинам: 1. в проекте уже используется этот класс для подгрузки строковых, 2. модель ключ-значение превращает xml-"конфиг" в одну сплошную кучу.
И так, немного поработав напильником, появился класс (не претендующий на оригинальность или что то еще в этом духе) LocaleSettings (заранее прошу прощения за мусор в комментариях, остались от Locale).
Пример xml-я который кушает этот класс:
Arial bg_en BTN_ACCEPT;BTN_OK;BTN_CANCEL BTN_BUY;BTN_CANCEL
Пример использования:
const DEFAULT_LANG:String = "ru"; LocaleSettings.setDefaultLang(DEFAULT_LANG); LocaleSettings.addXMLPath(DEFAULT_LANG, "settings/set_" + DEFAULT_LANG + ".xml"); // связываем язык с путем xml-файла var language:String = (loaderInfo.parameters.lang ? loaderInfo.parameters.lang : DEFAULT_LANG); LocaleSettings.addXMLPath(language, "settings/set_" + language + ".xml"); LocaleSettings.loadSettingsXML(language, languageXMLLoaded); // запускаем загрузку файла с настройками ... private function languageXMLLoaded(success:Boolean):void { if (LocaleSettings.checkXMLStatus()) { // пользуем загруженные настройки mainScreen.setBg(LocaleSettings.loadSetting("client", "bg_frame_label"); } }
Примечания:
- Файл с настройкам для языка по умолчанию 100% должен быть (на то он и по умолчанию)
- В случае если для заданного языка не нашлось настоечного файла (как по причине его фактического отсутствия так и в случае ошибки в именовании языкового кода), будет загружен файл для языка по умолчанию.
Комментариев нет:
Отправить комментарий