нужна помощь с классами для многоязычного интерфейса - PullRequest
0 голосов
/ 14 июля 2010

Я новичок в OOD, поэтому у меня есть вопрос об использовании классов для создания многоязычного пользовательского интерфейса.

Я хотел бы создать класс, который будет доступен для всех форм в моем приложении, чтобы я мог изменитьЯзык интерфейса всякий раз, когда я хочу.Основная идея заключается в хранении языковых ресурсов в файлах xml и создании привязок данных для всех элементов управления, чтобы свойство Text изменялось всякий раз, когда я загружаю новый файл языковых ресурсов.

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

.NET 3.5, C #, VS2008 Express

1 Ответ

0 голосов
/ 14 июля 2010

Решение ДЛЯ WPF

Вам необходимо создать в XML-файлы, первый будет содержать локализацию статических элементов управления (означает элементы управления, которые получают там строки локализации в точке OnApplyTemplate), второй будетсодержат строки локализации для динамических форм, таких как MessageBox или там, где вы будете динамически изменять содержание элемента управления.Затем для динамических строк вам нужно описать enum, значения которого должны быть ключами DynamicStrings.xml (например).

Это базовое значение.Затем при смене языка вам необходимо заполнить два словаря ключами и значениями для обоих типов строк локализации.Также вам понадобится менеджер, который будет заботиться о том, как получить конкретную строку для каждого нужного места.

Для элементов управления: привязка к любому строковому свойству, например, назовите его EmptyText, а затем напишите конвертер, который будетполучить в качестве параметра преобразователя ключ статического словаря и вернуть значение этого ключа:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (parameter != null && parameter is string)
                       return MessageManager.Instance.GetUITextById((string)parameter);
            return value;
        }

Для динамических элементов управления: просто передать в качестве параметров их инициализации Метод вашего менеджера:

MessageBox.Show(MessageManager.Instance.GetDynamicMessage(Messages.HelloWorldMessage));

Где MessageManager (использовать шаблон синглтона) - это ваш класс, который обрабатывает все ваши манипуляции с локализацией с помощью xmls и словарей, GetDynamicMessage будет получать строку по значению перечисления из DynamicDictionary, Messages - ваше перечисление.

...