Multilanguage



  • Moin,

    ja, ja... in der faq steht's.
    Aber irgendwie kann ich mich damit nicht zufrieden geben. Geht das nicht ein bisschen weniger umständlich???
    Wenn sich jemand von Euch schonmal mit sowas beschäftigt hat, lass es mich wissen!!!!

    Tausend Dank.
    Tom



  • Also ich mache das immer so:

    CString strPath = CString( GetCommandLine()).Left( CString(GetCommandLine()).ReverseFind('\\'));
    
        CStdioFile File;
        CString m_1;
        CString m_2;
        CString m_3;
        CString m_4;
        if(File.Open(strPath,CFile::modeRead,NULL) )
        {
            File.ReadString(m_1);
            File.ReadString(m_2);
            File.ReadString(m_3);
            File.ReadString(m_4);
            File.Close();
            GetDlgItem(IDC_RADIO_1)->SetWindowText(m_1);
            GetDlgItem(IDC_RADIO_2)->SetWindowText(m_2);
            GetDlgItem(IDOK)->SetWindowText(m_3);
            GetDlgItem(IDCANCEL)->SetWindowText(m_4);
        }
    

    Ich finde das um einges leicheter asl das im FAQ.



  • Schade ich haber vergesen das du an strPath noch den name der datei ranhängen muss die du als sprach datei willst.



  • @ mysticempires

    dann verwendest du aber keine dll's, sondern dateien die du selbst vorher erstellst bzw ini's ???



  • Hallo

    ich verwende dazu Textdateien (*.lng). So kann jeder spaeter
    weitere Sorachen dazufuegen.
    Einlesen mach ich zwar mit einer TStringList aber jeder wie er will.

    MfG
    Klaus



  • genaus so mache ich das.Hier noch mal der coder wo ich eine Datei in den Pfad eingebunden habe.

    CString strPath = CString( GetCommandLine()).Left( CString(GetCommandLine()).ReverseFind('\\'));
        strcat(strPath, "\\translation.ini");
    
        CStdioFile File;
        CString m_1;
        CString m_2;
        CString m_3;
        CString m_4;
        if(File.Open(strPath,CFile::modeRead,NULL) )
        {
            File.ReadString(m_1);
            File.ReadString(m_2);
            File.ReadString(m_3);
            File.ReadString(m_4);
            File.Close();
            GetDlgItem(IDC_RADIO_CS)->SetWindowText(m_1);
            GetDlgItem(IDC_RADIO_HL)->SetWindowText(m_2);
            GetDlgItem(IDOK)->SetWindowText(m_3);
            GetDlgItem(IDCANCEL)->SetWindowText(m_4);
        }
    

    Mann kann ja wenn man will eine ortner in seinen Programm verzeichnis erstellen der "Lang" da drin sind dan lauter date wie eng.ini und ru.ini die mann dan zum kanns leicht ins haubt verzeichnis kopiert und so in translation.ini umbennent.Sonne sprch datei sieht z.b so aus:

    Eingabe
    Was soll ersetzt werden :
    Durch was :
    Öffnen
    Ersetzen
    Beenden

    Also ich finde es so am leichtesten.

    Soory kann sein das Rechtschreibfehler drin sind bin garde in Zeitnot.



  • Aaalso ich habe das so gemacht:

    1. Eine stringtable anglegt.
    2. Jeweils um 100 (ID Nummern) versetzt die verschiedensprachigen Texte eingetragen

    z.B.

    ID_TEXT=100 enthält "Bitte öffnen"
    ID_TEXT_ENG=200 enthält "please open"
    ID_TEXT_NL=300 enthält "bedde offenen" (ich kann kein NL)

    3. jetzt einfach Konstanten DE = 0, ENG = 100, NL = 300.
    Irgendeine global, oder member m_iLang enthält dann die aktuelle Sprache und Du lädst texte immer mit:

    str.LoadString(ID_TEXT +m:iLang)
    

    Fertig. Wenn Du mehr als 100 verschiedene Texte zu jeder Spache hast, nimmst Du halt größere Abstände.

    F.



  • jui
    tausend dank für die antworten.
    bin zwischenzeitlich soweit gekommen, dass ich die stringtables in verschiedene dll's kopiert hab, für jede sprache eine.
    nun möchte ich über ein menue die sprache zur laufzeit verändern. und zwar so, dass alle neuen texte komplett zugewiesen werden, da das prog später nicht mehr auf die platte zugreifen soll. hat da vielleicht nochmal jemand ne idee, wie das funzt??


Anmelden zum Antworten