Text von Label zur Laufzeit per Mausklick ändern

Hallo zusammen,

ich habe vor, in bestimmten Bereichen per Mausklick die Bezeichnung von Label und Buttons durch eine andere Sprache zu ändern.

Ich habe mal ein Beispiel angehängt. Ich dachte, dass der Befehl window1.Refresh alle Controls aktualisiert. Wie könnte ich dies anhand meines Beispiels lösen?

Beispieldatei hier…!

LG
so27

Refresh macht keinen Sinn für Labels.

Du brauchst eine Methode, die Du aufrufst, wenn die Sprache geändert wird.

if sprache = "de" then
  label1.text = "meine name"
elseif sprache = "en" then
  label1.text = "my name"
end if

Das wird ohne ordentliches OO ganz schnell ganz häßlich.

Oder zumindest “etwas” schöner - verwende Localized Strings:

	#tag Constant, Name = kMyName, Type = String, Dynamic = True, Default = \"", Scope = Private
		#Tag Instance, Platform = Any, Language = de, Definition  = \"Mein Name"
		#Tag Instance, Platform = Any, Language = en, Definition  = \"My name"
	#tag EndConstant

Im Code kannst du dann auf die Konstante mit der jeweiligen Sprachkennung zugreifen:

Var s As String = kMyName("de")
s = kMyName("en")

Siehe dazu auch:
https://documentation.xojo.com/topics/localizing_your_apps/introduction_to_app_localization.html

Danke. Ich mache es jetzt über eine Methode.

@StefanA ist hier das Problem nicht, dass ich die Lokalisierung nicht zur Laufzeit umstellen kann? Wenn ich diese in Xojo verwende, dann geht dies nur, wenn die Systemsprache umgestellt wird.

Auf die verschiedenen Lokalisierungen kannst Du immer zugreifen.

1 Like

Je nachdem was man erreichen will gibt es noch weitere Ansatzpunkte.

Ich nutze z.B. in allen meinen Programmen einen Ordner “Localization” mit einem Modul “Strings” mit lokalisierten Konstanten vom Typ “String”. Da kann man dann für jede unterstützte Sprache den passenden Text eingeben.
Verwendet wird das Ganze dann z.B. im Text Objekt des Labels (z.B. mit #Strings.kLabel_Content).
Wenn man dann eine andere Sprache als die Systemsprache nutzen möchte, reicht es, entweder Global oder für das Fenster oder die Methode eine Variable anzulegen (heisst bei mir “XLng”) die mit dem Sprachkürzel (also z.B. “EN” oder “DE”) gefüllt wird. Durch das Ergänzen von (XLng) wird die passende Sprache der lokalisierten Konstante verwendet, anstelle von #Strings.kLabel_Content wird also #Strings.kLabel_Content(XLng) für das Textobjekt eingetragen.

Klingt komplizierter als es ist, erlaubt aber eine schneller und bequeme Sprachumschaltung bzw. Anpassung. Ist im Prinzip eine kleine Erweiterung der oben von Stefan A. und in der Dokumentation beschriebenen Vorgehensweise…