Silverlight - Paramterised значения ресурсов для интернационализации - PullRequest
1 голос
/ 25 июня 2009

Я столкнулся с проблемой, которая, кажется, не имеет никакого разумного / поддающегося решению решения, которым я доволен. Silverlight и интернационализация - трясина в процессе становления.

У меня есть набор файлов ресурсов, которые содержат переведенные строки.

В простом случае я могу объявить языковой ресурс и т. Д. И связать содержимое / текст значения внутри строго типизированного ресурса. Это хорошо - множество примеров того, что опубликовано.

Менее простой случай - строки могут иметь параметр, поэтому мне нужно вставить значение в строку для его отображения, что само по себе может быть привязкой данных.

Более сложный сценарий - это строка с несколькими параметрами.

Вы можете утверждать, что виртуальная машина должна обеспечивать эту возможность, но я недоволен этим, поскольку это разрывает разрыв между UX Designer и Developer, требуя от разработчика реализации свойства / метода на VM для поддержки каждой строки Интерфейс требует.

Например: после обратной связи с пользователем дизайнер решает добавить пользовательскую подсказку с дополнительной информацией о ней. Подсказка сделана декларативно и объединяет лучшее объяснение со значениями из текстового текста. Объяснение хранится в ресурсах, а используемые значения поступают либо из существующего контекста данных, либо из привязки элемента к элементу.

Если мне нужно выполнить каждую строку через ВМ, то добавление чего-то подобного требует изменения ВМ. Точно так же, если источником параметров будут другие элементы, то ВМ не обязательно находится в положении, чтобы предоставить отформатированную строку.

Как люди обошли этот вопрос?

A.

Ответы [ 2 ]

0 голосов
/ 30 июня 2009

Я не знаю точно, что вы хотите сделать, но у вас есть несколько решений.

  • Создайте новую строку в вашей виртуальной машине и сделайте ее INotifyPropertyChanged-способны

    public string MyTranslatedString 
    { 
       get 
         { 
            return string.Format("{0} Someone", LocalizedResource.Hello;
         }
     };
    

А затем прослушать события изменения локализации (из вашего приложения)

  • Создание нескольких текстовых блоков и привязка локализованных элементов:

    <TextBlock HorizontalAlignment="Stretch" Foreground="Black" Text="{Binding Path=Resource.CurrentlyLoggedInAs, Source={StaticResource LocalizedStrings }}" VerticalAlignment="Center" Margin="0,0,5,0" />
    <TextBlock HorizontalAlignment="Stretch" Foreground="Black" Text="{Binding Path=Username}" VerticalAlignment="Center" Margin="0,0,5,0" />
    <Button Commands:Click.Command="{Binding Path=LogOutCommand}" Commands:Click.CommandParameter="" Content="{Binding Path=Resource.LogOut, Source={StaticResource LocalizedStrings }}" />
    

Вы должны добавить в основное приложение:

<Application.Resources>
    <local:LocalizedStrings 
        xmlns:local="clr-namespace:Localization.Silverlight;assembly=Localization.Silverlight"
        x:Key="LocalizedStrings" />
</Application.Resources>

Это самые простые подходы, которые я придумала, но я очень рада, что у меня есть что-то более простое.

0 голосов
/ 26 июня 2009

Этот вопрос более сложный, чем я могу ответить полностью, но если вы хотите, чтобы привязки учитывали конкретную локализацию, вам следует установить свойство Language вашего контейнера пользовательского интерфейса (возможно, ваш класс UserControl верхнего уровня). После этого все привязки должны использовать запрашиваемую локализацию. Ознакомьтесь с этой статьей, которая касается WPF, но использует методы, которые, как представляется, применимы к Silverlight: http://www.west -wind.com / weblog / posts / 796725.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...