Для нашего приложения WPF все наши строки локализованы как ресурсы в ResourceDictionary
, который мы помещаем в файл .xaml, названный по имени языка (например, en-US.xaml, ja-JP.xaml и т. Д.).
Например, где-то в приложении кнопка может выглядеть так:
<Button Content="{StaticResource Strings.FooDialog.BarButtonText}"/>
Каждый ResourceDictionary
для разных языков будет содержать его версию:
<sys:String x:Key="Strings.FooDialog.BarButtonText">Bar!</sys:String>
ResourceDictionary
динамически подключается к Application.Resources
во время выполнения следующим образом:
private static void LoadLocalizedStrings(CultureInfo uiCulture)
{
ResourceDictionary stringsResourceDictionary = new ResourceDictionary();
stringsResourceDictionary.Source = new Uri(@"pack://application:,,,/Resources/Strings/" + uiCulture.Name + ".xaml");
Application.Current.Resources.MergedDictionaries.Add(stringsResourceDictionary);
}