VC ++ 10 MFC: Was ist die richtige Art der Lokalisierung?

8

Ich bin ein .NET-Typ, der an einer MFC-App arbeiten muss. Die App ist eine VS2008 MFC-Programmdatei, die ich in VS2010 konvertiert habe. Die ursprünglichen Entwickler haben die Lokalisierung durchgeführt, indem sie den Namen einer TXT-Datei mit Schlüsselwertpaaren in der Befehlszeile der Anwendung angegeben haben. Installierte Verknüpfungen zur ausführbaren Datei geben eine andere .txt-Datei an, abhängig davon, in welchem ​​Land die App installiert wird. Dies funktioniert natürlich nicht, wenn Sie die .exe-Datei direkt ausführen. Das scheint eine seltsame Art zu sein, Dinge mit mir zu tun.

Ich möchte dies mit der richtigen MFC-Methode machen, aber ich habe Schwierigkeiten, definitive Antworten auf Google zu finden. Mein Verständnis ist, dass die String-Tabelle in der .rc-Datei für diese Lokalisierung verwendet werden sollte? Ist dies die aktuelle Best Practice für MFC?

In Bezug auf die String-Tabelle habe ich gelesen, dass es üblich ist, mehrere String-Tabellen für jeweils eine andere Sprache zu erstellen. Wie wählen MFC-Anwendungen die zu verwendende Sprache aus? Basiert es auf den aktuellen Spracheinstellungen der Maschine oder kann ich dies steuern? (Vielleicht möchten wir, dass die Sprache von dem Wix .msi-Installationsprogramm angegeben wird, das wir auch erstellen)?

Ich habe auch gelesen, dass das Einbetten aller Ressourcen in eine MFC-Anwendung in Ungnade gefallen ist und dass Sie jetzt separate Ressourcen-DLLs kompilieren sollten. Ist das wahr, erkundigen Sie sich, wie es geht ...

Schließlich muss ich etwas Besonderes tun, um MFC Unicode oder MFC Unicode standardmäßig zu unterstützen?

Danke

    
MrLane 05.01.2012, 03:40
quelle

2 Antworten

10

Die Idee ist, dass alle lokalisierbaren Elemente in Ressourcen gespeichert werden sollten. Standard-UI-Objekte wie Menüs und Dialoge werden automatisch dort (Ressourcen) für Sie gespeichert, aber Elemente wie String-Literale (z. B .: Fehlermeldungen, MessageBox-Aufforderungen, ...) sollten aus dem Quellcode in die String-Tabelle gezogen werden. Dieser kurze Codeprojekt-Artikel von mir zeigt, wie Sie einfach Strings aus der String-Tabelle in Ihrem Code ziehen können. p>

Hinweis: Sie sollten nur eine Zeichenkettentabelle in Ihrem Ressourcenskript (.rc) haben.

Von da an können Sie Ihre Ressourcen übersetzen und Ressourcen-DLLs (auch Satelliten-DLLs genannt) erstellen. Die Idee ist, dass Sie eine andere Kopie der .rc Datei (en) für jede Sprache behalten. Jede Übersetzung wird in eine codelose DLL kompiliert, die als Container für die Ressourcen fungiert.

In diesem anderen Codeprojekt-Artikel können Sie einfach Ressourcen-DLLs nach Systemeinstellungen oder Benutzereinstellungen laden : Der Code sucht unter Ihren Ressourcen-DLLs, welche verfügbare Sprache am besten mit den Benutzereinstellungen übereinstimmt (basierend auf der Benutzeroberflächensprache und regionalen Einstellungen). Mit dem Code können Sie auch problemlos ein Menü mit allen verfügbaren Sprachen erstellen. Auf diese Weise kann Ihr Benutzer die Standardauswahl überschreiben.

HAFTUNGSAUSSCHLUSS: Meine Anzeige folgt. Zögere nicht zu überspringen: -)

Bei der Übersetzung von Ressourcen, der Verwaltung von Übersetzungen und der Erstellung von Ressourcen-DLLs sollten Sie appTranslator ausprobieren.

Ende der AD: -)

In Bezug auf Unicode wird MFC mit ANSI- und Unicode-Versionen des Codes ausgeliefert. Es liegt an Ihnen, ob Sie eine ANSI- oder eine Unicode-App erstellen möchten: Wählen Sie einfach auf der ersten Seite der Projekteinstellungen aus. Natürlich, wenn Sie von vorne anfangen, sollten Sie auf jeden Fall Unicode gehen. Wenn Sie aus Gründen der Legalität gezwungen sind, ANSI / MBCS zu bleiben, sollten Sie sich keine Sorgen machen: Es wird Sie nicht davon abhalten, Ihre App zu lokalisieren.

    
Serge Wautier 08.01.2012, 20:46
quelle
6

Vor Jahren, als ich mit mehreren Sprachen in MFC arbeiten musste, verwendeten wir separate Ressourcen-DLLs. Alles, was Sie tun müssen, ist einen Anruf zu machen, um zu wechseln, welche Handle die Ressourcenfunktionen verwenden würden und alles war von diesem Punkt an automatisch.

Sie müssen mehr tun, als nur die Zeichenfolgen zu ändern. Insbesondere Dialoge enthalten Zeichenfolgen in ihnen, und Sie müssen möglicherweise das Layout ändern, wenn diese Zeichenfolgen nach der Übersetzung zu lang werden.

    
Mark Ransom 05.01.2012 03:44
quelle