Любая помощь для оптимизации или идеи (в комментариях) о том, почему это не работает, будет оценена!

ал, как изменить язык формы, которая имеетLocalizable атрибут установлен в true.

https://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture(v=vs.110).aspx

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

В поисках информации я увидел следующий вопрос:https://stackoverflow.com/a/11738932/3286975 но, как говорится в комментарии, у меня есть элементы управления внутри TabControl и MenuStrip, поэтому они не затрагиваются.

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

В этом меню я вызываю следующий обратный вызов:

    private void englishToolStripMenuItem_Click_1(object sender, EventArgs e)
    {
        string lang = (string) ((ToolStripMenuItem) sender).Tag;
        base.Culture = CultureInfo.CreateSpecificCulture(lang);
    }

    private void spanishToolStripMenuItem_Click(object sender, EventArgs e)
    {
        string lang = (string) ((ToolStripMenuItem) sender).Tag;
        base.Culture = CultureInfo.CreateSpecificCulture(lang);
    }

Я меняю культуру с помощью тега.

Когда я нажимаю, ничего не происходит. Кроме того, я немного изменил метод ApplyResources из упомянутого ответа.

private void ApplyResources(Control parent, CultureInfo culture)
{
        this.resManager.ApplyResources(parent, parent.Name, culture);

        foreach (Control ctl in parent.IterateAllChildren())
        {
            //this.ApplyResources(ctl, culture);
            this.resManager.ApplyResources(ctl, ctl.Name, culture);
        }
}

Где IterateAllChildren является следующим:https://stackoverflow.com/a/16725020/3286975

Кроме того, я попытался с (System.LINQ):Controls.OfType<Label>() (потому что у меня есть один ярлык, чтобы проверить это) без удачи ...

Но когда я выбираю испанский язык, текст не меняется.

Так что, может быть, я не согласен с детьми. Или, возможно, вызвав методCreateCulture, Я не знаю.

Заранее спасибо!

РЕДАКТИРОВАТЬ:

Я проверил, чтобы получить Resource Manager моей формы от Culture Info, и он каждый раз возвращает значение по умолчанию:

 ResourceSet resourceSet = new ResourceManager(typeof(frmCredentials)).GetResourceSet(new CultureInfo(lang), true, true);
            foreach (DictionaryEntry entry in resourceSet)
            {
                string resourceKey = entry.Key.ToString();
                object resource = entry.Value; //resourceSet.GetString(resourceKey);
                if (resource.GetType().Equals(typeof(string)))
                    Console.WriteLine("Key: {0}\nValue: {1}\n\n", resourceKey, (string) resource);
            }

гдеnew CultureInfo(lang)Я также проверил:new CultureInfo("es") & Thread.CurrentThread.CurrentCulture (CurrentUICulture) без везения. Как будто он никогда не существует или заменен, но в моем дизайне и файловом обозревателе я могу видеть файлы.

EDIT2:

Возможно, это потому, что я использую ILMerge для объединения всех библиотек в один. Я рассматриваю это:Развертывание многоязычных Windows Forms для одной сборки (ILMerge и сателлитные сборки / локализация) - возможно?

Ответить на EDIT2:

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

Кроме того, я установил для атрибута Localizable значение false, и он не создал файл resx по умолчанию со значениями. Я не знаю, хорошая ли это практика.

Я попробую что-то новое ...

Ответы на вопрос(3)

Ваш ответ на вопрос