Я пытаюсь переключать языки в своем приложении, и кажется, что я не могу заставить его работать.
Я создал папку ресурсов с файлами по схеме именования Language.*culureinfo.resx
, т. Е. Language.en-US.resx
со значением по умолчанию Language.resx
Я хочу a) перечислить все доступные языки и b) фактически изменить язык в приложении.
Для а) обходного пути может быть текстовый файл со всеми доступными языками для перечисления их в Resources.resx. Но если возможно, я хочу получить языки из доступных файлов ресурсов.
Для б) Я сделал тестовую форму с меткой:
public Form1()
{
InitializeComponent();
this.label1.Text = Resources.Language.LabelString;
}
и сделал кнопку, которая вызывает этот код, который я получил из здесь с аргументом "en-US"
:
private static void ChangeLanguage(string lang)
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
foreach (Form frm in Application.OpenForms)
{
localizeForm(frm);
}
}
private static void localizeForm(Form form)
{
var manager = new ComponentResourceManager(form.GetType());
manager.ApplyResources(form, "$this");
applyResources(manager, form.Controls);
}
private static void applyResources(ComponentResourceManager manager, Control.ControlCollection controls)
{
foreach (Control ctl in controls)
{
manager.ApplyResources(ctl, ctl.Name);
applyResources(manager, ctl.Controls);
}
}
но ничего не происходит. Может ли кто-нибудь сказать мне, что я делаю не так?