2017-01-02 11 views
1

Мне нужно показать демонстрацию того, как управление может быть локализовано с помощью спутниковых сборок. Во время этого я застрял в одном месте, где у меня есть два элемента управления на одной и той же форме. Я использовал его для создания метки. Теперь мне нужно отобразить control1 с культурой fr-FR и control2 с культурой de-DE.Как установить две разные культуры для двух разных элементов управления в одной форме одновременно?

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

Следующий скриншот покажет мою потребность.

enter image description here

Пожалуйста, предложите мне, что это возможно или нет. Если это возможно, дайте мне знать, как я могу это достичь.

ответ

1

Вы можете положиться на localization Особенность окон форм. Таким образом вы можете настроить свои элементы управления с различными свойствами для разных культур. Затем вы можете отобразить всю форму со свойствами, заданными для определенной культуры.

Также у вас есть возможность показать каждый элемент управления с другой культурой. Для этого он достаточно использовать такой код в обработчик события формы Load:

System.Threading.Thread.CurrentThread.CurrentUICulture = 
    System.Globalization.CultureInfo.GetCultureInfo("fr-FR"); 
var resources = new System.ComponentModel.ComponentResourceManager(this.GetType()); 
resources.ApplyResources(button1, button1.Name); 

И просто для button2 использования выше код с de-DE культуры.

Примечание

  1. Выше решение не ограничивается Text собственности, он поддерживает все Localizable свойства.

  2. Вы можете просто сделать это как метод расширения для класса управления.

  3. У этого есть дизайнерская поддержка для создания локализованного внешнего вида ваших элементов управления.

+0

Дополнительную информацию о многоязычных приложениях, использующих формы Windows, см. В статье: [Как сделать многоязычное приложение в winforms] (http: // stackoverflow.com/q/32989100/3110834) –

+0

Это то, что для ApplyResources требуется только получить локализованную строку из файла resx. – Adhi

+0

В локализованной форме «ПрименитьResources» будет автоматически вызываться в «InitializeComponent» для каждого элемента управления. То, что мы здесь сделали, - это вызов «ApplyResources» для определенного элемента управления после установки «CurrentUICulture» в определенную культуру. Таким образом, мы можем загружать разные культуры для разных элементов управления. –

1

Попробуйте использовать следующий код.

if(langCode=="fr-FR") 
{ 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR"); 
} 
if(langCode=="de-DE") 
{ 
Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE"); 
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE"); 
} 
+0

Где мне нужно использовать этот код в Form_Load? – Adhi

+0

, где вы передаете значение «langCode» и их последующее заявление. –

1

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

private void SetLocalizedTextForLabel(Label label, string language) 
{ 
    var original = Thread.CurrentThread.CurrentUICulture; 
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(language); 

    // Here value will be retrieved from YourResource based on the current culture 
    label.Text = Properties.YourResource.YourText; 

    Thread.CurrentThread.CurrentUICulture = original; 
} 

Затем используйте его

SetLocalizedTextForLabel(frenchLabel, "fr-FR"); 
SetLocalizedTextForLabel(germanLabel, "de-DE"); 
+0

Для демонстрации это нормально. Это возможно в реальном рабочем приложении. как я могу обеспечить поддержку для них в реальном приложении, например, мой элемент управления будет иметь поддержку по умолчанию для двух разных культур в одной и той же форме в ядре. – Adhi

Смежные вопросы