Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > WPF и Silverlight > [SL] сменить язык интерфейса на лету |
Автор: dazy 5.2.2010, 23:05 |
Сделал глобализацию приложения по опыту: http://jachman.wordpress.com/2009/06/10/how-to-localize-silverlight-applications-the-smart-way/ С небольшими правками, но в целом, то же самое. Вопрос, как реализовать смену интерфейса на лету? Люди, если есть опыт переключения языка интерфейса подскажите, как это сделать. Возможно опыт WPF тоже подойдет, но не уверен. Везде советуют INotifyPropertyChanged реализовать. И примеры даже есть. Но что то не получается у меня, не переключается язык. Любая помощь пригодиться. |
Автор: tol05 6.2.2010, 17:11 |
я бы сделал http://www.codeproject.com/KB/WPF/WPF_Resx_Localization.aspx |
Автор: dazy 6.2.2010, 23:34 |
Я так понял, автор хранит слабые ссылки на все объекты которые запрашивали локализированные строки. А потом по сигналу проходит по списку со слабыми ссылками и если те живы, заставляет их взять новый контент. Что-то сильно прям, наворочено так. Боюсь не смогу это в сильверлайт засунуть. Я тут INotifyPropertyChanged осилить не могу, а этот подход, вообще монстрообразный. Может есть способ, в силверлайте заставить все контролы сделать рефреш? Чтобы они в принудительном порядке запросили новое значение контента? |
Автор: tol05 7.2.2010, 14:09 |
Да нет, внутри все гораздо проще. ) Просто все свойства контролов, подлежащие локализации (текстовые, скажем) соединены через биндинг с определенным объектом. Объект при стартапе считывает из ресурсов значения, а контролы через биндинг их вытягивают. Каждый - свое значение. При поступлении команды сменить локализацию объект инициализирует себя значениями новых ресурсов, при этом контролы через биндинги подтягивают себе эти новые значения. |
Автор: dazy 7.2.2010, 18:46 | ||
C вот этой вот частью проблема. Все остальное вроде работает, а как заставить контролы забрать новое значение - не могу понять. |
Автор: Partizan 8.2.2010, 01:28 |
а вариант с хранением всех строк в определённом ResourceDictionary и последующим референсом через DynamicResource не прокатывает для SL? |
Автор: dazy 8.2.2010, 07:23 |
Как хранить строки это не принципиально. Можно хоть в текстовом файле, хоть в БД. У меня хранятся в ресурсах, но на самом деле это не так важно. Есть главное приложение, и ряд окошек ChildWindow. Когда делаю смену языка, то главное окно не рефрешится. Но вот если вызвать дочернее окно, то оно уже будет на другом языке. Т.е. не порядок. После того как закрыли приложение и снова запустили - главное окно тоже на новом языке. Тут проблема не столько с локализацией сколько с тем чтобы принудительно заставить контролы главного окна запросить новые данные локализованных строк. Пока же приходится при смене языка делать рестарт приложения. |
Автор: Partizan 8.2.2010, 12:58 |
dazy, ну вот я и спрашиваю - чем DynamicResource не подходит? в WPF на лету меняется всё. стоит только подменить ResourceDictionary. |
Автор: dazy 8.2.2010, 13:55 |
DynamicResource в силверлайте нет. Есть реализация функционала через INotifyPropertyChanged. С ним у меня как раз проблемы. |