Решение ДЛЯ 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 - ваше перечисление.