Как изменить язык в моей WinForm?

Я разрабатываю приложение на С#. Текущий язык моей системы — французский. Что я хочу, так это то, что когда я открываю свое приложение, язык должен быть изменен на английский. Есть ли в любом случае, с помощью которого я могу выполнить эту задачу. Я пытался изменить язык через код, но ничего не работает.

Вот мой код

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US");

person Fazil Mir    schedule 30.01.2014    source источник
comment
Что именно вы имеете в виду, похоже, ничего не работает? Что вы хотели, чтобы произошло? Что на самом деле произошло?   -  person John Saunders    schedule 30.01.2014
comment
Текущий язык моей системы — французский. Чего я хочу Когда я открываю свое приложение, язык должен быть изменен на английский. @ДжонСондерс   -  person Fazil Mir    schedule 30.01.2014
comment
Что вы имеете в виду, что язык должен быть изменен на английский? Вы имеете в виду, например, что у вас есть этикетка с надписью Bonjour, и она вам нужна, чтобы сказать «Доброе утро»?   -  person John Saunders    schedule 30.01.2014
comment
Нет братан. Смотри, я разработал приложение. Но когда я развернул его на клиентской машине, функциональность не работала должным образом, но в моей собственной системе она работала нормально, поскольку в качестве текущего языка у меня был английский. но мой клиент из Нидерландов, поэтому язык в его системе голландский. вот мой код, который влияет на Convert.ToDouble(value);, он работает нормально, когда язык английский, но когда язык меняется, я не получаю правильного значения.   -  person Fazil Mir    schedule 30.01.2014
comment
@FazilMir, вместо того, чтобы менять культуру, я бы предложил использовать культуру пользователя для преобразования. Лучше использовать double.TryParse(value, userculture, NumberStyles.Any, out result)   -  person Junaith    schedule 30.01.2014
comment
@Junaith Я использовал Convert.ToDouble(value); в своем приложении более 30 раз. Я не хочу менять его сейчас. в любом случае спасибо   -  person Fazil Mir    schedule 30.01.2014
comment
@FazilMir Покопайтесь в моих ответах. У меня есть несколько объяснений системы, как добиться смены языка на лету. Начните здесь stackoverflow.com/a/21286999/1704458   -  person T.S.    schedule 30.01.2014


Ответы (4)


Я собираюсь предположить, что ваши формы локализованы на французский и английский языки. Если это так, то как только вы запустите код в своем вопросе, новые формы, которые вы отображаете, будут отображаться на новом языке.

Если вы хотите изменить язык и заставить отображаемые в данный момент формы повторно отображать свой текст на новом языке, вам нужно собрать что-то, что отвечает на изменение культуры, и обновить все метки, переключатели и т. д.

К счастью, кто-то уже сделал эту работу за вас:

http://www.codeproject.com/Articles/23694/Changing-Your-Application-User-Interface-Culture-O

person prprcupofcoffee    schedule 30.01.2014

Windows не будет автоматически переводить ваше приложение, вам необходимо предоставить их самостоятельно и загрузить их для конкретного языка.

В этой статье объясняется процесс довольно хорошо. Вы обновляете культуру, которая сообщает системе, какие файлы ресурсов использовать. Теперь вам нужно предоставить текст для отображения.

person Liath    schedule 30.01.2014

Вы должны перезагрузить формы (или переключить язык, прежде чем создавать любую форму)

Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
Form1 form1 = new Form1();
form1.ShowDialog();

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

Если вы хотите изменить раскладку клавиатуры (FR -> EN), то, хотя это тоже возможно, лучше этого не делать. Поскольку пользователь может иметь свои предпочтения, какой макет он хочет использовать по умолчанию.

person Sinatr    schedule 30.01.2014

Я не могу воспроизвести вашу проблему здесь. Код должен работать нормально с точки зрения изменения способа работы метода Double.Parse. Вот как я провел тест:

string duit = "1.000.100";  //this is a valid number format in my current culture
string money = "1,000,100"; //but this is not valid
var culture = CultureInfo.CurrentCulture; //my current culture is indonesia (id-ID)
var duitDouble = double.Parse(duit);  //parsed successfully
Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
culture = CultureInfo.CurrentCulture;  //now current culture is english (en-US)
var moneyDouble = double.Parse(money); //parsed successfully

Кроме того, я действительно предлагаю перефразировать ваш вопрос и заголовок, чтобы избежать недоразумений. Это будет хорошо для вас и людей, которые намерены помочь. Как видите, большинство опубликованных ответов на самом деле не отвечают на вопрос (фактическая проблема указана во втором комментарии ОП к вопросу).

person har07    schedule 30.01.2014