Falsche Spracheinstellung in der Startform

czemmel

Mitglied
Habe eine kleine Anwendung mit ca. 5 Formen. Habe meine Startform auf Localizable = true gestellt und gespeichert.
Danach habe ich die Sprache auf Englisch gesetzt und alle Buttons, Labels usw. übersetzt und gespeichert. Dies habe ich mit allen Formen so gemacht und die sprache wieder auf Standard zurückgestellt. Es werden auch alle resx-Dateien angezeigt.
Meine Spracheinstellung hole ich aus einer ini-Datei die mir dann in der Form_load der Form über eine neue UICulture eingestellt wird.

Nun mein Problem:
wenn ich die Sprache auf Englisch umstelle, werden alle Formen auf Englisch angezeigt, bis auf die Startform
Warum?
Danke für jede Hilfe
 
Morgen

Wenn du im FormLoad die UICulture setzt ist das zu spät. Das setzten der Control-Properties geschieht in der Methode InitializeComponent und die wird vor FormLoad ausgeführt. Wenn du die Sprache auch für diese Form ändern willst musst du das vor dem Ausführen von InitializeComponent machen, also entweder in der Main-Funktion oder im Konstruktor.
Wenn du das Setzen der UICulture im FormLoad behalten willst, musst du anschließend mit dem ComponentResourceManager über alle Controls laufen und die Properties neu setzen.
 
Danke,
ich würde gerne diese Einstellung in der form_load lassen.
Hasste ein Beispiel für den ComponentResourceManager
 
Ich hab mal dazu was bei einem DotNetCast vorgetragen.
In den Beispielen findest nützliche Links sowie eine Demo, die Dir die Verwendung von unterschiedlichen Programmsprachen erläutert. In dem Live Cast erkläre ich wie die Demo funktioniert und wie man bei Steuerelementen Propertys zu Laufzeit setzt.

//Edit: Hier noch ein kleines Snippet wie man Eingenschaften von Steuerelementen zu Laufzeit aus den Resourcen laden kann:
C#:
this.SuspendLayout();

ResourceManager resources = new ResourceManager( this.GetType() );
foreach( Control _control in this.Controls )
	if ( !excludeList.Contains( _control.GetType() ) )
		_control.Text = resources.GetString( myControl.Name + ".Text" );

this.ResumeLayout();

[thread=258561]Lokalisierung .resx oder .resources - Komplexe Grundsatzfrage zur Lokalisierung - Thread[/thread]
 
Zuletzt bearbeitet:
Des t einfach net so wie ich des will.

Also hier meine Aufrufe in der Form_load:
call einlesen_sprache und dann
call fuellecontrolls(me)

und hier meine methoden:
Public Sub einlesen_Sprache()
' setzen einer Sprachkultur, Daten aus der ini
Thread.CurrentThread.CurrentUICulture = New CultureInfo(strSprache)

translate = New ResourceManager("IDCweb.Resources", System.Reflection.Assembly.GetCallingAssembly())
.Show(Thread.CurrentThread.CurrentUICulture.DisplayName)
End Sub

Public Sub fuellencontrolls(ByVal obj As System.Windows.Forms.Control)
'// Abruf aller lbl, btn , und geschachtelte Panel zur Beschriftung
'// Beschriftung mittels ResourcenManager (translate.getString)


For Each thisControl As System.Windows.Forms.Control In obj.Controls
Dim strtmp As String = translate.GetString(thisControl.Name.ToString)
'If strtmp <> "" Then thisControl.Text = strtmp
thisControl.Text = IIf(strtmp <> "", strtmp, thisControl.Text)
'// Beschriftung von Panels mit mehreren Labels usw.
If thisControl.HasChildren Then
For Each thisctr As System.Windows.Forms.Control In thisControl.Controls
thisctr.Text = translate.GetString(thisctr.Name.ToString)
Next thisctr
End If
Next

Ich muss dazu noch anmerken, dass ich vorher alles in einer Resourcen-datei abgelegt hatte und dies auch funktionierte. Nun wollte ich in VB2005 das übersetzen der formen einfacher gestalten durch das Lokalisieren und es t halt net?
 
Funktioniert alles, man braucht halt nur ab und zu einen kleinen Denkanstoss.

Steuere meine Sprache mit dem Startup_Event und es funktioniert :)
 
Zurück