WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Language pack für meine GUI

 

Knappe Franz
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.08.2011, 13:52     Titel: Language pack für meine GUI
  Antworten mit Zitat      
Diesmal eine etwas allgemeinere Frage:

Unsere GUI ist soweit fertig und soll nun veröffentlicht werden. Das Ganze dann in Englisch für breiteres Puplikum usw.

Meine GUI ist jetzt aber noch komplett in Deutsch mit allen Labels, Menü-Einträge etc.

Bevor ich mich jetzt ranmache und alle Sachen direkt in GUIDE übersetze, wollt ich mal fragen, ob ihr eine Idee habt, wie man eine Art language-pack sinnvoll (wenn das überhaupt sinnvoll ist..) integrieren kann. Ich mein, wenn ich jetzt eh schon alles in Deutsch hab, wärs doch cool, wenn man die Sprache im Programm umstellen kann.

Meine einzige Idee wäre, die einzelnen Label-Beschriftungen alle untereinander in eine txt-Datei zu schreiben und diese beim Programmstart zu laden und per set(..,'String',..) auf die Objekte zu schreiben.

Meint ihr, das ist den Aufwand wert? Gibts bessere Ideen?

Danke für eure Hinweise Smile
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.08.2011, 16:38     Titel: Re: Language pack für meine GUI
  Antworten mit Zitat      
Hallo Knappe Franz,

eine Text-Datei und das dynamische Setzen der 'String'-Properties ist effizient und wird häufig auch so gemacht. Ein Problem bleibt noch, wie man die einzelnen Strings findet. Sinnvoll wären eindeutige Tags ähnlich den ini-Files in Windows:
Zitat:
[MainGUI]
Title=Haupt-GUI
Footer=(c) by Knappe Franz
...

Und dann gibt es für jede Sprache eine Datei. Damit wird die Gefahr der Verwirrung beim Übersetzen möglichst klein gehalten.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Knappe Franz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 09:49     Titel:
  Antworten mit Zitat      
Okay, danke dafür Smile

Eine Frage bleibt mir noch: Wie lese die Strings am besten aus? Ich hab ja, wenn ich das richtig seh, zwei Möglichkeiten:
1. die txt-Datei auslesen und alles in einer Variablen haben. Danach in der vorher definierten Reihenfolge
Code:

set(label1,'String',data(1));
set(label2,'String',data(2));
.
.
set(label30,'String',data(30));
 

Die Werte zuweisen. Dann wären die Tags nur für die Leute sinnvoll, die die Übersetzung machen.

2. ich lasse bei jeder Zusweisung des Labels mit strfind den entsprechenden Tag suchen und das entsprechende Wort dieser Zeile zuweisen.. Dann ist die Reihenfolge auf jeden Fall egal, in der die Labels in der txt-Datei stehen..

Aber 2. is schon ganz schön ineffizient in Sachen Rechenpower.. Was würdest du bevorzugen? Gibts noch andere Lösungswege?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.08.2011, 18:06     Titel:
  Antworten mit Zitat      
Hallo Knappe Franz,

"data(1)" ist nicht aussagekräftig. Ein Debuggen wird damit zur Qual. Ich würde die Tags aus dem File als Fieldname eines Structs benutzen:
Code:
File:
"[MainGUI]
Title=Haupt-GUI
Footer=(c) by Knappe Franz"
% => Einlesen in:
Strings.MainGUI.Title = 'Haupt-GUI';
Strings.MainGUI.Footer=(c) by Knappe Franz"

% Dann im GUI-code:
S = Strings.MainGUI;
set(label1, 'String', S.Title);
set(label2, 'String', S.Footer);

Nebenbei betrifft das Problem auch "label1" und "label2". Aussagekräftige Namen für Variablen sind immer sehr hilfreich. Dann hättest Du z.B.:
Code:
set(Title_label, 'String', S.Title);
set(Footer_label, 'String', S.Footer);

Dann wird Dir auch nächstes Jahr noch auf Anhieb klar, was Du da programmiert hast.

Meine Programme sind auch im Laufe der Jahre immer weiter gewachsen. Wenn ich dann mal etwas erweitern muss, was ich 1999 geschrieben habe, und was nun 300.000 Zeilen Matlab Code umfasst, wäre ich mit "label1" und ohne ausführliche Dokumentation und Kommentarzeilen schnell aufgeschmissen...

Gruß, Jan

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Knappe Franz
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 11:01     Titel:
  Antworten mit Zitat      
Super, danke! Dann setz ich mich mal ran und bastel mir ne Function zum Auslesen des txt-files.

Das mit den "sprechenden Bezeichnern" hab ich schon umgesetzt, ich wollt es hier nur nicht weiter vertiefen Wink Ich geb mir auch Mühe mit Kommentaren usw. Ich programmiere auch schon ne ganze Weile, nur halt mit Matlab erst seit einem knappen halben Jahr.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.