Поиск обходного пути для применения Localization в Ribbon Control с использованием LocalizationExtension из codeplex - PullRequest
1 голос
/ 20 августа 2010

Мое приложение должно поддерживать несколько языков и должно иметь возможность переключать язык во время выполнения. Для этой цели я использую LocalizationExtension из codeplex (http://wpflocalizeextension.codeplex.com/). Я использую Ribbon Contorl в своем приложении. Я создаю ленточные команды в качестве ресурса окна, а также связываю LableTitle и другие свойства с классом LocalizationExtension.

    <MvvmCore:RibbonCommandExtended x:Key="SwitchLanguageCommand" 
                            CanExecute="RibbonCommandExtended_CanExecute"
                            Executed="RibbonCommandExtended_Executed"
                            LabelTitle="{lex:LocText Key=SwitchLanguage,Dict=LanRes}"
                            ToolTipTitle="{lex:LocText Key=SwitchLanguage,Dict=LanRes}"
                            LargeImageSource="{lex:LocImage Key=ChangeLanguage,Dict=LanRes}"/>

Затем присвоить его кнопке Свойство команды как статический ресурс.

<rb:RibbonButton x:Name="EnglishButton" Command="{StaticResource SwitchToEnglishCommand}" Click="EnglishButton_Click">

Вот мой класс RibbonCommandExtended.

 public class RibbonCommandExtended : RibbonCommand
    {
        private ICommand m_command;
        public ICommand Command
        {
            get { return m_command; }
            set
            {
                m_command = value;
                if (m_command != null)
                {
                    this.CanExecute += UsCanExecute;
                    this.Executed += UsExecuted;
                }
                else
                {
                    this.CanExecute -= UsCanExecute;
                    this.Executed -= UsExecuted;
                }
            }
        }

        private void UsExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            Command.Execute(e.Parameter);
        }

        private void UsCanExecute(object sender, CanExecuteRoutedEventArgs e)
        {
            e.CanExecute = Command.CanExecute(e.Parameter);
        }
    }

Когда моя программа запускается, элемент управления ленты выбирает нужные языковые строки и изображения. Но когда я менял язык во время выполнения, я не мог видеть никаких изменений в локализованном тексте и изображении элемента управления ленты. Потому что LabelTitle, LargeImageSource и все остальные свойства RibbonCommand не являются свойствами зависимости.

Кто-то уже решил проблему? Или есть какой-то другой способ, кроме LocalizationExtension, чтобы локализовать мое приложение, чтобы оно отвечало моим требованиям?

1 Ответ

0 голосов
/ 14 сентября 2010

Легко использовать LocalizationExtension для локализации приложения. Но, возможно, нам следует вернуться к базовому методу, чтобы сделать локализацию, разделить ресурс культуры и изменить его во время выполнения. Пожалуйста, обратитесь к http://msdn.microsoft.com/en-us/library/ms788718.aspx.. Вам может понадобиться инструмент Locbaml, чтобы сгенерировать CVS, чтобы мы могли отредактировать его для нескольких культур, а затем загрузить CSV в файл dll ресурсов для другой культуры и изменить его с помощью кода:

Thread.CurrentThread.CurrentCulture = new CultureInfo (...); Следующий проект содержит руководство по локализации WPF. Техническая документация по локализации WPF может вам помочь: http://wpflocalization.codeplex.com/

...