Comments 23
спасибо, тут про silverlight мало статей — да и мне было очень полезно прочесть про локализацию, как раз предстоит ее делать.
Хорошая статья, спасибо.
Прошу прощенья, но все-таки: «Привет, мир!». Обращение обособляется запятыми :-)
Статья хорошая, НО…
Использование механизма ресурсных сборок для локализации как минимум неудобно.
Лично я предпочитаю выностить как строки, так и другие (картинки) локализуемые ресурсы в [подгружаемый/изменяемый] xaml-стиль.
Мороки при этом никак не больше, а плюсы вполне очевидны.
Использование механизма ресурсных сборок для локализации как минимум неудобно.
Лично я предпочитаю выностить как строки, так и другие (картинки) локализуемые ресурсы в [подгружаемый/изменяемый] xaml-стиль.
Мороки при этом никак не больше, а плюсы вполне очевидны.
Вы, безусловно, правы. Пользование данной библиотекой затруднено различными опциями. Я задумывался об этом и обещаю, во второй части, поделиться своими мыслями о решение данной проблемы.
Неплохо бы даже короткое (неподробное) описание глянуть.
Со стилями — интересный вариант.
Не будет проблем если в приложении уже подгружается куча стилей для разных тем (скинов). Или в итоге для каждой темы надо будет делать копии с различными переводами? Или визуальные стили отдельно — текст отдельно?
Со стилями — интересный вариант.
Не будет проблем если в приложении уже подгружается куча стилей для разных тем (скинов). Или в итоге для каждой темы надо будет делать копии с различными переводами? Или визуальные стили отдельно — текст отдельно?
Вкратце.
По памяти, ибо не с рабочей машины пишу.
За описки — не бить. Весь MSDN в мозг не влазит.
Загрузка XAML на C#:
Файл XAML ресурсов:
Использование — XAML:
Использование — C#:
Динамическая загрузка/смена поддерживается.
Кстати, советую на какую-нибуть комбинацию клавиш повесить принудительную загрузку.
Нет. Не будет. Единственное требование — доступ к ним должен быть не через StaticResource, а через DynamicResource.
Как хотите.
Лично я предпочитаю отдельные файлы локализации для каждого из языков. Правда не только со строками, но и с локализабельными элементами стиля (картинки / векторная графика). А сами стили отдельным .xaml.
P.S.: Если что не понятно и есть достаточно заинтересовавшихся, могу и полноценную статью написать.
По памяти, ибо не с рабочей машины пишу.
За описки — не бить. Весь MSDN в мозг не влазит.
Загрузка XAML на C#:
// Имя файла: lang.enu.xaml fName = stirng.Format("lang.{0}.xaml", Thread.CurrentUICulture,.ThreeLetterISOLanguageName); // Грузим откуда-то-там наш файл ResourceDictionary dic = (ResourceDictionary)XamlReader.Load(...); Resources.MergedDictionaries.Clear(); Resources.MergedDictionaries.Add(dic);
Файл XAML ресурсов:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" > <System:String x:Key="sHello">Hello, world</System:String> </ResourceDictionary>
Использование — XAML:
<Label Text="{DynamicResource sHello}" />
Использование — C#:
string strHello = (string)Application.Current.FindResource("sHello");
Динамическая загрузка/смена поддерживается.
Кстати, советую на какую-нибуть комбинацию клавиш повесить принудительную загрузку.
Не будет проблем если в приложении уже подгружается куча стилей для разных тем (скинов).
Нет. Не будет. Единственное требование — доступ к ним должен быть не через StaticResource, а через DynamicResource.
Или в итоге для каждой темы надо будет делать копии с различными переводами? Или визуальные стили отдельно — текст отдельно?
Как хотите.
Лично я предпочитаю отдельные файлы локализации для каждого из языков. Правда не только со строками, но и с локализабельными элементами стиля (картинки / векторная графика). А сами стили отдельным .xaml.
P.S.: Если что не понятно и есть достаточно заинтересовавшихся, могу и полноценную статью написать.
У Silverlight нет поддержки DynamicResource, поэтому возникает вопрос — откуда он взят и(или) как он реализован?
Спасибо за уточнение.
Лействительно, в Silverlight нет DynamicResource.
Зато есть Binding и Converter'ы.
Sapienti sat
Лействительно, в Silverlight нет DynamicResource.
Зато есть Binding и Converter'ы.
Sapienti sat
Зато есть Binding и Converter'ы.
Которые не смогут заменить DynamicResource, и не только из-за отсутствия такового, а ввиду различий в реализации класса ResourceDictionary между WFP(в котором присутствует DynamicResource) и Silverlight.
Было бы интересно провести параллели между подходами, я бы с удовольствием почитал вашу статью.
Спасибо, здорово.
На следующем проекте попробую, может понравится такой подход. :)
На следующем проекте попробую, может понравится такой подход. :)

Проблему больших xap файлов можно решить галочкой «Reduce XAP size by using application library caching» в свойствах проекта Silverlight и приложив к каждой библиотеке *.extmap.xml файл примерно такого содержания:
-
- <?xml version="1.0" encoding="utf-8" ?>
- <manifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <assembly>
- <name>Lib</name>
- <version>1.0.0.0</version>
- <publickeytoken>c29bf231c66490a5</publickeytoken>
- <relpath>Lib.dll</relpath>
- <extension downloadUri="Lib.zip" />
- </assembly>
- </manifest>
-
«Reduce XAP size by using application library caching» — не работает с Out-of-Browser
Отличная практика кэширование Silverlight сборок. Может получиться отличная статья. Только, к сожалению, данный подход не работает с дополнительными(satellite) сборками.
Скажите, на лету интерфейс переключается? Т.е. чтобы сменить язык нужно ли перезапускать приложение?
Хотелось бы увидеть подход переключения именно на лету, без перезагрузки.
Хотелось бы увидеть подход переключения именно на лету, без перезагрузки.
Если вы сделаете связку(binding) между пользовательским элементом и ресурсом, то при смене культуры данные обновятся.
Sign up to leave a comment.
Локализация в Silverlight