2017-12-20 10 views
0

Ich arbeite an einer mehrsprachigen Anwendung mit VC++, MFC in Visual Studio. Ich habe separate .rc-Datei für jede Sprache.
sagenWie zu verwenden/laden RC-Datei für Multiligual-Anwendung?

English.rc //having string table for English language 
French.rc //having string table for French language 
German.rc  //having string table for German language 

jede Sprache ihre String-Tabelle gehalten wird müssen.
Da wir die Funktion LoadString(ID_HERE) verwenden können, um den Zeichenfolgenwert aus der Zeichenfolgentabelle abzurufen. Ich möchte verschiedene Sprache RC-Datei verknüpfen, so dass ich Zeichenfolge für andere Sprache erhalten kann. Standardmäßig ist die Datei English.rc dem Projekt zugeordnet. Ich möchte wissen, wie ich es mit einer anderen .rc-Datei ändern kann.

Wie kann ich eine bestimmte Sprach-RC-Datei zur Laufzeit laden/verknüpfen oder die Sprache ändern, indem Sie eine beliebige Sprache in der Dropdown-Box auswählen?
Ich möchte nicht DLL-Methode dafür verwenden. Gibt es eine direkte Methode zum Verknüpfen von RC-Datei mit Projekt?

+2

* „Ich will nicht DLL-Methode für sie verwenden“ * - ich weiß nicht, was das bedeuten soll, aber Das Kompilieren der Ressourcenskripte in Nur-Ressourcen-Module ist die Standardlösung. Siehe [Hinzufügen einer Unterstützung für mehrsprachige Benutzeroberflächen zu einer Anwendung] (https://msdn.microsoft.com/en-us/library/windows/desktop/ee845043.aspx). – IInspectable

+0

@Intspectable Ich habe einige Links überprüft. In einem von ihnen wurde eine separate DLL erstellt, indem alle RC-Dateien hinzugefügt und versucht wurden, sie zu verwenden. Ich denke, der Link, den Sie zur Verfügung gestellt haben, hat auch etwas Ähnliches "HelloModule.dll" – Himanshu

+0

Das Tutorial, mit dem ich verlinkt habe, erstellt ein einzelnes MUI-Modul pro Sprache plus die sprachneutrale * "HelloModule.dll" * -Datei, die sowohl Code als auch Sprache enthält. neutrale Fallback-Ressourcen. Es ist zwar möglich, mehrsprachige Versionen einer bestimmten Ressource im selben Modul zu speichern, Sie verlieren jedoch die Möglichkeit, die MUI-Unterstützung des Systems zu verwenden, indem automatisch nach sprachspezifischen MUI-Dateien gesucht wird. Weitere Informationen finden Sie in der Dokumentation zur [LANGUAGE-Anweisung] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa381019.aspx). – IInspectable

Antwort

0

Das ist der Weg. Sie müssen eine Ressourcen-DLL erstellen und die Ressourcen daraus laden. Ein anderer Weg wäre, alle Ressourcen als sprachabhängige Bedingungen zu haben. Dann würde MFC die Ressource basierend auf der Betriebssystemsprache auswählen. Aber es ist fast unmöglich, alle Sprachen für große Projekte synchron zu halten, und Sie haben keine Kontrolle über die angezeigte Sprache.

Die Sprache Ressourcen-DLL Art funktioniert wie folgt:

HMODULE hm = ::LoadLibrary(language_dll); 
if(hm) 
{ 
    AfxSetResourceHandle(hm); 

    if(m_hLanguageDLL) 
     ::FreeLibrary(m_hLanguageDLL); 
    m_hLanguageDLL = hm; 
} 
Verwandte Themen