Frage

Ich habe eine GUI-Anwendung auf Windows Mobile zu bauen, und möchte es in der Lage Benutzer sein, um die Sprache zu wählen, sie will, oder die Anwendung die Sprache automatisch zu wählen. Ich halte mehrere DLLs unter Verwendung enthält nur erforderlichen Ressourcen.

1) Was ist die bevorzugte (default?) Art und Weise der Anwendung wählen Sie die richtige Ressource Sprache automatisch zu erhalten, ohne Eingreifen des Benutzers? Etwaige Proben?

2) Was sind meine Optionen Benutzer / Anwendungssteuerung, welche Sprache sollte angezeigt werden?

ermöglichen

3) Wenn möglich, wie erstelle ich eine DLL, die mehrere Sprachressourcen und wählen Sie dann dynamisch die Sprache enthalten würde?

War es hilfreich?

Lösung

# 1 können Sie die GetSystemDefaultLangID Funktion holen Sie sich die Sprachkennung für die Maschine.

# 2, könnten Sie Sprachen aufzulisten, die Sie unterstützen, und wenn der Benutzer wählt man, schreiben Sie die Auswahl in eine Textdatei oder Registry (gibt es eine Registrierung auf Windows Mobile?). Beim Start, verwenden Sie die Funktion in # 1 nur, wenn es keine Auswahl in der Datei oder Registrierung.

# 3, die Art, wie wir es tun, ist eine Ressource-DLL für jede Sprache zu haben, von denen jeder die gleichen Ressourcen-IDs enthält. Sobald Sie die Sprache herauszufinden, laden Sie die DLL für diese Sprache und der Rest funktioniert einfach.

Andere Tipps

Re. 1: Der vorherige GetSystemDefuaultLangID Vorschlag ist gut

Re 2: Sie können als ein erster Schritt in Ihrer Installation fragen. Oder Sie können für jede Sprache unterschiedliche Installateure verpacken.

Re 3: In der Theorie erwähnt die DLL-Methode oben klingt großartig, aber in der Praxis funktionieren sie nicht sehr gut überhaupt für mich persönlich.

Eine bessere Methode ist alle Saiten in Ihrem Programm zu umgeben, mit entweder: Localize oder NoLocalize.

MessageBox(Localize("Hello"), Localize("Title"), MB_OK);
RegOpenKey(NoLocalize("\\SOFTWARE\\RegKey"), ...);

Localize ist nur eine Funktion, die Ihr Englisch Text in eine der ausgewählten Sprache umwandelt. NoLocalize tut nichts.

Sie möchten Ihre Strings mit diesen Werten allerdings umgeben, weil Sie ein paar nützliche Skripte in Ihrer Skriptsprache der Wahl aufbauen können.

1) Ein Skript, das für die ganze Localize (“Präfixen und gibt eine INI-Datei mit Englisch = otherlangauge Name Wertepaare sucht. Wenn die Ausgabe INI-Datei bereits eine Zuordnung enthält, die Sie fügen es nicht wieder. Sie nie neu erstellen die iNI-Datei vollständig, Ihr Skript fügt nur die fehlenden jedes Mal, wenn Sie Ihren Skript ausführen.

2) Ein Skript, das alle Fäden sucht und stellt sicher, dass sie entweder Localize umgeben sind ( „oder NoLocalize (“. Wenn nicht, es sagt Ihnen, welche Saiten Sie noch lokalisieren müssen.

Der Grund # 2 wichtig ist, weil Sie sicher, dass alle Ihre Strings machen müssen, sind bewusst als, um die Lokalisierung tatsächlich markiert oder nicht. Ansonsten ist es absolut unmöglich, um sicherzustellen, dass Sie die richtige Lokalisierung haben.

Der Grund für die # 1 statt Laden von einer DLL ist, weil es keine Arbeit nimmt diese Lösung zu halten, und Sie können neue Saiten hinzufügen, die on the fly übersetzt werden müssen.

Sie versenden die INI-Dateien, die Ausgabe mit Ihrem Programm. Sie geben auch diese ini-Dateien auf Ihren Übersetzer, damit sie die Englisch = otherlanguage Paare umwandeln kann. Wenn sie es zu Ihnen zurück, ersetzen Sie einfach in INI-Datei eingecheckten mit dem von Ihrem Übersetzer gegebenen. Ausführen von Skripts wie in # 1 erwähnt wird alle fehlenden Übersetzungen erneut hinzufügen, wenn überhaupt gemacht wurden, während der Übersetzer übersetzen war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top