ResourceManager не выбирает правильный язык
Используя свойства локализации и языка, я перевел форму Form1.
В событии Form1_Load я хочу установить текст для меток, кнопок и так далее...
private void Form1_Load(object sender, EventArgs e)
{
SetLanguage();
}
Метод SetLanguage:
private void SetLanguage()
{
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("de");
System.Resources.ResourceManager rm = new System.Resources.ResourceManager(typeof(Form1));
button1.Text = rm.GetString("button1.Text");
linkLabel1.Text = rm.GetString("linkLabel1.Text");
checkBox1.Text = rm.GetString("checkBox1.Text");
}
Но он не работает, он всегда выбирает английские строки "default/fallback" (но de CultureInfo установлен). Я понятия не имею, что не так... Я использовал тот же код в новом примере приложения, и он работал в этом небольшом примере приложения. Но в моем реальном приложении это не работает.
Также в явном виде сообщает ressourcemanager, что для использования Culture возвращает английскую строку вместо немецкого:
MessageBox.Show(rm.GetString("button1.Text", new System.Globalization.CultureInfo("de")));
Есть идеи?
1 ответ
Этот раздел является важным. Когда мы устанавливаем для локализуемой формы значение true и собираем приложение, Visual Studio .NET создает ресурсы, специфичные для культуры, указанной в свойстве Language формы. Visual Studio .NET создает файл ресурсов, используя resgen.exe. Мы также можем создавать ресурсы, используя следующий синтаксис:
resgen mytext.en-us.txt mytext.en-us.resources
resgen mytext.en-us.resources mytext.en-us.resx
// Эта команда читает файл двоичных ресурсов mytext.en-us.resources и // записывает выходной файл на основе XML с именем mytext.en-us.resx. Теперь ресурсы созданы, но нам нужно связать их с приложением, так что это делается в Visual Studio.NET с помощью AL.exe (компоновщик сборки). Мы также можем сделать это вручную, выполнив это:
al
/t:lib
/embed:mytext.en-us.resx
/culture:en-us
/out:Myapplication.resources.dll
Вы можете найти больше о resgen.exe и al.exe в документации MSDN.