Assemblies, Satelliten, Resourcen, Sprachen



  • Hallo,

    also ich versuche mich in .net einzuarbeiten und stehe, ganz am Anfang, vor dem Problem, wie ich in meinem Programm mehrere Sprachen unterstütze (automatisch und mittels manueller Einstellung).

    Seit mehreren Tagen kämpfe ich mich nun schon durch Beispiele, etc. (alles C#, doch die Umsetzung in C++ sollte ich schon schaffen) - ohne Erfolg.

    Ich möchte ein Programm erstellen, welches die Sprachressourcen statisch einkompiliert enthält, wahlweise auch nur eine Sprache oder eben, wenn es nicht anders geht, diese Ressourcen in dll's bereitstellen (ohne Versionen, Schlüssel, etc.).

    Also habe ich nun folgende Dateien:

    lang.resources
    <?xml version ="1.0"?>
    <configuration>
        <satelliteassemblies>
            <assembly name="lang, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null">
                <culture>de-DE</culture>
                <culture>en-US</culture>
            </assembly>
        </satelliteassemblies>
    </configuration>
    
    lang.en-US.resources
    str1	"Test in English"
    
    lang.de-DE.resources
    str1	"Test in Deutsch"
    

    Um den Code zu testen, habe ich in Main folgende Zeilen:

    ResourceManager^ SprachMan = gcnew ResourceManager("lang", Assembly::GetExecutingAssembly());
    String^ str = SprachMan->GetString("str1");
    Console::WriteLine("{0}", str);
    

    Leider bekomme ich aber bei der Programmerstellung folgenden Fehler:

    Ressourcensatelliten werden erstellt...
    ALINK: error AL1057: Executables cannot be satellite assemblies, Culture should always be empty

    Sicher mache ich noch einiges falsch und bin auch noch total unsicher, wie ich solch ein Programm am besten erstelle, damit es auch klein, schnell und wartungsfreundlich ist und aus einem Verzeichnis gestartet auf anderen Rechnern läuft (.net natürlich installiert) - also möglichst statisch.

    Wenn mir jemand hier einen Link oder (besser) eine kleine Erklärung zur Vorgehensweise geben könnte, wäre das sehr nett.

    Achja, die Resourcendateien sind einfach Textdateien (ich verwende VC Express und da gibt es wohl keinen Resourcen-Editor) und habe diese Dateien im Projekt unter Ressourcendateien eingefügt.

    Grüsse



  • Eigentlich musst Du doch gar keine config-Datei erstellen... Du musst nur sicherstellen, dass Du auch Resourcen Deinem Projet hinzugefügt hast... vermutlich heisst Deine Resource etwas anders als Du es angibst (Executing Assembly ist vermutlich falsch).



  • Also ohne Config (Du meinst die XML Datei, denke ich) werden keine Satelitten erstellt (also keine Verzeichnisse de-DE, en-US, in die dann ja wohl die dll's kommen würden). Und es kommt ohne die Config bei Programmstart zu einer Ausnahme - irgend etwas mit kann die Dateien nicht finden, etc.

    Also entweder habe ich die Naming-Conventions nicht ganz verstanden oder ich muss doch noch irgend einen Assembly/Reflection/was auch immer Eintrag vornehmen?

    Ich habe da einfach keine Ahnung (wahrscheinlich noch nicht einmal soviel, dass ich die reichtrige Frage formulieren kann).



  • Ich habe den Fehler gefunden. Da ich ja VS Express verwende und - hätte ich vielleicht noch erwähnen sollen - noch kein Form im Programm habe, läuft das anders, als mit einem Form. Mit Form kann man ja einfach die resource Datei in VS öffnen und dort bearbeiten. Ohne jedoch heisst es eine .txt Datei schreiben (mit Wertepaaren), die VS Eingabeaufforderung öffnen, in das Verzeichnis wechseln und dann diese .txt Datei mit resgen.exe in eine resource Datei konvertieren.

    Also nun läuft's 🙂

    Und ich suche mal, wie ich die Sprachen nun eigentlich wechsle 🙂


Anmelden zum Antworten