Как локализовать ToggleSwitch на Windows Phone 7 (локализация Silverlight Toolkit)?

В Silverlight Toolkit есть файл ресурсов с именем Resources.resx, который содержит строковые состояния «Вкл.» и «Выкл.» для переключателя. Но когда я добавил соответствующий локализованный ресурс Resources.ru-RU.resx, он не подхватился локализацией (хотя аналогичный подход работает и для моих собственных ресурсов).

Один из способов сделать это — создать собственную привязку для ToggleSwitch Content, но я надеялся на решение без кодирования. Возможный?


person Sergey Aldoukhov    schedule 01.09.2011    source источник


Ответы (2)


Вам нужно назвать файл ресурсов ControlResources.ru-RU.resx , см. Статья Андрея Торзена на эту тему.

person Claus Jørgensen    schedule 01.09.2011
comment
Но это не так. Может стоит еще что-то сделать, кроме создания Resources.ru-RU.resx - person Sergey Aldoukhov; 01.09.2011
comment
Да, имя должно быть ControlResources.ru-RU.resx, а не Resources, см. tozon.info/blog/post/2011/08/18/ , если это сработает, я обновлю ответ. - person Claus Jørgensen; 01.09.2011
comment
Это работает для всего, кроме меток On/Off для ToggleSwitch - они почему-то находятся не в файле ControlResources.resx, а в Resources.resx, который находится в папке Properties. Может быть, Джефф подумал, что On/Off не следует локализовать? В любом случае, хороший ответ. - person Sergey Aldoukhov; 02.09.2011
comment
Вы всегда можете самостоятельно перекомпилировать SL Toolkit с этим исправлением. Или создайте баг-репорт на codeplex. - person Claus Jørgensen; 02.09.2011
comment
Кстати, это было зарегистрировано как ошибка на CodePlex (silverlight.codeplex.com/workitem/10164), и я недавно проверил исправление для ресурсов ToggleSwitch, которые не находились в правильном месте. - person Shawn Oster; 28.04.2012

Локализовать ToggleSwitch в Silverlight Toolkit можно через DataTemplate.

    <toolkit:ToggleSwitch x:Name="MySwitch" Header="Localized Switch">  
        <toolkit:ToggleSwitch.ContentTemplate>  
            <DataTemplate>  
                <ContentControl HorizontalAlignment="Left"   
                    Content="{Binding Converter={StaticResource Switch}}"/>  
            </DataTemplate>  
        </toolkit:ToggleSwitch.ContentTemplate>  
    </toolkit:ToggleSwitch>

Объявите ValueConverter:

    public class BoolToSwitchConverter : IValueConverter  
    {  
        private string FalseValue = Resources.Off;  
        private string TrueValue  = Resources.On;  

        public object Convert(object value, Type targetType, object parameter,
              System.Globalization.CultureInfo culture)  
        {  
            if (value == null)  
                return FalseValue;  
            else  
                return ("On".Equals(value)) ? TrueValue : FalseValue;  
        }  

        public object ConvertBack(object value, Type targetType, 
               object parameter, System.Globalization.CultureInfo culture)  
        {  
            return value != null ? value.Equals(TrueValue) : false;  
        }  
    }

Подробнее здесь.

person Ernest    schedule 28.09.2011