Страницы

Поиск по вопросам

вторник, 16 июля 2019 г.

Как использовать языки, которые не поддерживаются официально в “windows phone”?

Доброго времени суток, Хэшкод. Насколько я понял, сейчас в WP7 язык приложения по умолчанию подстраивается под язык в настройках (регион + язык -> язык интерфейса) Статей по данной тематике довольно много, и все довольно просто. Но существует проблема. WP7 поддерживает не так уж много языков, а у меня например есть необходимость использовать языки, которые не входят в список поддерживаемых. Попробовал было установить язык напрямую: Thread.CurrentThread.CurrentCulture = new CultureInfo("ыы-ЫЫ"); // ыы-ЫЫ - аббревиатура никому не известного языка Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture; Однако так сделать не получилось, т.к. на неизвестные языки программа ругается. С известными все проходит. Как можно использовать такие языки? Есть у кого идеи? [обновлено 10.09.2012] Так, более актуальный вопрос: Я тут внезапно заметил, что после смены языка требуется перезагрузка ОС. Это вообще нормально? И можно ли как-то эту фигню обойти?


Ответ

Вариант решения описан здесь: Localization with an unsupported language На первый взгляд - работает. Как проверю свой вариант, отпишусь о результатах. Сделал, действительно работает, хотя подводных камней довольно много. Как будет время - распишу решение подробно. Итак: Возможности для выстрела в ногу (обратить внимание тем, кто сначала написал в стиле, рекомендованном Майкрософт(как я), а потом вынужден будет реализовывать новый язык. Все обращения к ресурсам придется переписывать. Это печально. Поехали): В классе LocalizedResources.cs путь к ресурс-менеджеру описывается в стиле: _rman = new global::System.Resources.ResourceManager("AppName.Folder.ResourcesApp", typeof(ResourcesApp).Assembly); для известных языков где: AppName - имя приложения Folder - папка, в которой лежат ресурсы. У меня это была папка Resources. Если в корне - соответственно ничего не пишем. ResourcesApp - то, как называются наши файлы для известных языков. В примере он один и называется Resource(для английского). Т.е. для английского это будет Resource.resx или Resource.en-US.resx или Resource.en-UK.resx, для русского Resource.ru-RU.resx и.т.п. Постфикс(а.к.а ru-RU) не имеет значения, нужный язык потом выберется через метод SwitchCulture для неизвестных соответственно используется перегруженный метод SwitchCulture public void SwitchCulture(string UnsupportedCulture) { _rman = new global::System.Resources.ResourceManager("App.Resources.XXX" + UnsupportedCulture, typeof(ResourcesApp).Assembly); } где XXX это то, как полностью называется файл с ресурсами для неизвестного языка. В примере эти файлы называются Resource_Klingon.resx и Resource_Vulcan.resx. // там должно быть подчеркивание между словами, почему-то не отображается У меня было соответственно ResourcesApp.LanguageName.resx Т.е. в примере путь выглядел, как "PhoneApp1.Resource_", в моем случае "App.Resources.ResourcesApp." Для обращения к ресурсам используется метод Get. Соответственно все обращения в стиле: Resources.resourceName придется заменить на LocalizedResources.Resources.Get("resourceName") Аналогичная ситуация со связыванием через Binding. Вместо обращений, типа: "{Binding Path=LocalizedResources.someName, Source={StaticResource LocalizedStrings}}" используются {"Binding Source={StaticResource LocalizedStrings}, Converter={StaticResource LocalizedStrings}, ConverterParameter=someName}"

Комментариев нет:

Отправить комментарий