2017-09-28 2 views
0

Es gibt viele Fragen zu diesem Thema, aber immer noch keine Lösung für uns lesenLokalisierung via resx in winforms

Ich habe all meine Ressourcen in einem separaten Projekt, und dieses Projekt hat einen Ressourcenordner mit 3 Sprachen in ihm.

In jeder Steuer ich im Konstruktor habe einen Aufruf an InitializeLanguage() wo ich den richtigen Text für die richtige Sprache wie folgt festgelegt:

public void InitializeLanguage() 
    { 
     bOK.Text = Lastenboek.Language.Ok; 
     cbSM.Text = Lastenboek.Language.SamenvattendeMeetstaat; 
     cbDM.Text = Lastenboek.Language.DetailMeetstaat; 
     cbDMHeadingStyles.Text = Lastenboek.Language.KopStijlen; 
     cbExportArtikelsZonderMeetstaat.Text = Lastenboek.Language.ArtikelsZonderMeetstaat; 
     cbSMHeadingStyles.Text = Lastenboek.Language.KopStijlen; 
     cbRamingsPrijs.Text = Lastenboek.Language.Ramingsprijs; 
     cbBeknopteOmschrijving.Text = Lastenboek.Language.BeknopteOmschrijving; 
     cbFaseSM.Text = Lastenboek.Language.GesplitstOpFase; 
     groupBox3.Text = Lastenboek.Language.Filter; 
     label2.Text = Lastenboek.Language.Tot; 
     label1.Text = Lastenboek.Language.DatumVan; 
     gbPrijzen.Text = Lastenboek.Language.Prijzen; 
     label3.Text = Lastenboek.Language.Account; 
     cbTotaalSM.Text = Lastenboek.Language.Totaal; 
     groupBox4.Text = Lastenboek.Language.Template; 
     label4.Text = Lastenboek.Language.Layout; 
     Text = Lastenboek.Language.ExporteerMeetstaat; 
    } 

Alles funktioniert gut, aber jetzt manchmal das Etikett ist zu klein für den Text in anderen Sprachen. Gibt es eine gute Möglichkeit, die Sprache zur Designzeit zu ändern und die Dimensionen für verschiedene Sprachen zu ändern?

+0

Haben Sie die Label.Autosize-Eigenschaft versucht? [Label.AutoSize-Eigenschaft] (https://msdn.microsoft.com/en-us/library/system.windows.forms.label.autosize (v = vs.110) .aspx) – rmjoia

+0

sie sind alle auf Autosize aber eingestellt Sie überlappen andere Steuerelemente – Sennevds

+0

Ich nehme an, Sie können immer die TextBox.Text.Length -Eigenschaft und passen Sie die Breite .. – rmjoia

Antwort

1

Ja. Und Sie müssen nicht einmal lokalisierte Texte/Bilder und andere Werte programmieren.

Setzen Sie einfach Localizable Eigenschaft auf Ihrem Formular true und dann können Sie Sprachen zur Entwurfszeit wechseln und alles für diese Sprache zur Entwurfszeit bearbeiten.

Wenn Sie die Anwendung starten, wird das Formular die Windows-Sprache verwenden. Wenn Sie es programmgesteuert ändern möchten, setzen Sie einfach die Eigenschaft Thread.CurrentThread.CurrentUICulture. Möglicherweise möchten Sie Ihr Formular erneut posten, um die Sprache anzuwenden, oder rufen Sie explizit InitializeComponent() an.

+0

Ich weiß, das ist eine Option, aber Sie haben Resx-Dateien pro Formular oder Steuerelement. Ich habe alle meine Ressourcen für eine Sprache in einer separaten resx-Datei in einem anderen Projekt – Sennevds

+0

Natürlich, und das ist die bevorzugte Art der Lokalisierung. Sie werden in Ihre Assembly kompiliert, sodass Sie die RESX-Dateien nicht bereitstellen müssen. – taffer

+0

In der Tat, aber jetzt habe ich das Problem, dass ich die Sprache zur Entwurfszeit nicht ändern kann und die Größe und den Ort pro Sprache nicht ändern kann – Sennevds

1

Das Problem ist, dass Sie dynamische Texte für Steuerelemente haben, aber Sie wollen "hardcode" feste Steuergrößen für jede Sprache haben.

mit diesem Ansatz kann Wartung kompliziert sein. Jede Änderung in der Übersetzung sollte in UI getestet werden - ob es in der Kontrolle passt oder nicht.

Ein anderer Ansatz wird die Unterstützung von "AutoSize" für Steuerelemente sein. Winforms haben TableLayoutPanel Steuerelement, das für Steuerelemente mit dynamischen Texten nützlich sein kann.

+0

+1 für die Erwähnung von "TableLayoutPanel", die MSFT sogar für die Lokalisierung empfiehlt. Siehe "Gewusst wie: Unterstützung der Lokalisierung in Windows Forms mit AutoSize und dem TableLayoutPanel-Steuerelement", das sich derzeit hier befindet https://msdn.microsoft.com/en-us/library/1zkt8b33(v=vs.90).aspx. In der Praxis braucht es jedoch einige Anstrengungen, um den Kopf einzuwickeln. Es kann frustrierend sein, es zur Arbeit und in Kombination mit bestimmten anderen Eigenschaften zu bringen (und schafft eine Lernkurve für diejenigen, die es später unterstützen müssen, selbst Monate oder Jahre später). Es macht jedoch den Job (zum größten Teil). – Larry

Verwandte Themen