none
Lokalisierung: Type Eigenschaft Ressourcendatei RRS feed

  • Frage

  • Hallo,

    eine Frage in Bezug auf die Ressourcendatei (.resx) bei Lokalisierung einer Windows Forms Anwendung (.NET 4.0, Visual Studio 2010).

    Sobald man bei einem Dialog die Eigenschaft Localizable auf True setzt werden ja Eigenschaften wie Texte, Größen und Positionen der einzelnen Controls auf der Form in die resx Datei ausgelagert.

    Beim Öffnen der .resx Datei sind mir jedoch direkt folgende Eigeschaften ins Auge gefallen:

    • >>"Name Control".Type
    • >>"Name Control".Parent
    • >>"Name Control".ZOrder

    Für mich stellt sich hierbei die Frage wofür diese "Infos" genau benötigt werden. Sobald man diese aus der .resx Datei manuell löscht und den lokalisierten Dialog nochmal im Designer öffnet, sind die Infos wieder in die Ressourcendatei geschrieben. Es kommt so auch zu keinem Fehler, wenn man das Projekt ohne diese Infos in der .resx Datei kompiliert.

    Bei meinen Recherchen habe ich bis jetzt nur definitiv herausbekommen, dass der Ressourceneditor WinRes auf diese Infos angewiesen ist um den Dialog anzeigen zu können. Sonst werden Platzhalter für die Controls eingefügt für die diese Infos nicht vorhanden sind.

    Meine Frage ist, ob wirklich nur WinRes diese Informationen (speziell der Type) in der Ressourcendatei benötigt oder ob an anderer Stelle diese Infos in der resx Datei unabdingbar sind. Bei meinen "Tests" hatte das immer nur Auswirkungen auf das öffnen der .resx Datei im Tool WinRes.

     

    Weiß jemand näheres dazu?

    Gruß

    Dominik

    Dienstag, 21. Juni 2011 17:12

Alle Antworten

  • Hallo Dominique,

    es wird empfohlen, diese Properties nicht löschen. Der Designer (Erstellung) würde sie auch normal neu generieren.
    Hier Hintergrund-Informationen dazu:

    [Why Name, Parent, Type, & ZOrder in the resx file?]
    http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-sdk/1566/Why-Name-Parent-Type-ZOrder-in-the-resx-file

    [Why Name, Parent, Type, & ZOrder in the resx file? - HighTechTalks DotNet Forums]
    http://www.hightechtalks.com/dotnet-internationalization/why-name-parent-type-zorder-541964.html

    [WinRes - Cool Client Stuff - Site Home - MSDN Blogs]
    http://blogs.msdn.com/b/rprabhu/archive/2003/08/21/56536.aspx

    [Winres.exe (Windows Forms Resource Editor-Tool)]
    http://msdn.microsoft.com/de-de/library/8bxdx003.aspx

    Man sollte auch beachten, dass im "Form*.Designer.cs" bei "Localizable==true" ja über Dinge wie:
           resources.ApplyResources(this,"$this"); // ... etc.

    zugegriffen wird.

    ciao Frank

    Dienstag, 21. Juni 2011 18:09
  • Hi Frank,

    danke für die schnelle Antwort. Ne Löschen wollte ich die auch gar nicht war nur zur Erklärung.

    Es stellt sich für mich noch die Frage ob die Type Eigenschaft in folgendem Szenario eine Auswirkung hat:

    In einer Klassenbibliothek (z.B. MyForms) befinden sich im Projekt einige benutzerdefinierte Controls und Dialoge. Im Hauptprojekt werden diese verwendet.  In der resx Datei eines Dialogs im Hauptprojekt steht dann z.B. MyForms.MyTextBox, MyForms, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

    Mit dem nächsten Release wird die Assemblyversion von allen Projekten (so auch von der Library MyForms) hochgesetzt. In diesem Fall werden ja nicht alle .resx Dateien im Hauptprojekt abgeändert in denen der Type MyForms vorkommt. Sobald der Dialog im Designer geöffnet wird und Veränderungen vorgenommen werden wird die Version des Type "aktualisiert". Nun möchte man ja nicht bei jedem Release jeden Dialog einmal im Designer öffnen um das zu erzwingen.

    Es kommt also zu der Situation das der Type in den resx Dateien nicht immer "aktuell" ist und die Version nicht mit der der Assembly übereinstimmt. Kann es hierdurch zu Problemen kommen?

    Gruß

    Dominik

    Mittwoch, 22. Juni 2011 06:32
  • Hallo Dominik,

    • Es stellt sich für mich noch die Frage ob die Type Eigenschaft in folgendem Szenario eine Auswirkung hat ...

    Normal sollte das trotz verschiedener Assembly-Versionen funktionieren - es gibt dann ein Fallback auf die zur Verfügung stehende Version.
    Aber man kann diese Versions-Bindungen auch zum Beispiel über Herausgeberrichtlinien-Dateien genauer definieren:

    [Umleitung der Assemblybindung]
    [Konfigurieren der Umleitung der Assemblybindung]
    [<assemblyBinding>-Element für <runtime>]


    ciao Frank
    Mittwoch, 22. Juni 2011 08:29
  • Ja habe noch keinen Fall nachstellen können, wo es zu einem Fehler oder ähnlichem bei der Ausführung kam.

    Ich frag mich jedoch immer noch ob die kompilierte Anwendung den Type aus der .resx Datei ausliest oder ob dies nur für WinRes von Nöten ist. Man findet ja auch keine offizielle Dokumentation wieso diese Eigenschaften z.B. in der resx ">>" am Anfang tragen.

    Bevor man die Eigenschaft Localizable des Dialogs auf true setzt sind die Type Informationen ja auch nicht in Form eines Strings als Eigenschaft des Objektes hinterlegt. In der resx wird er jedoch geschrieben und WinRes ist auf ihn angewiesen.

     

    Gruß

    Dominik

    Mittwoch, 22. Juni 2011 10:26
  • Hallo Dominik,

    ja, AFAIK im Effekt letztlich nur für WinRes von Nöten (denn bei Ausführung der App gibt es ggf. ein FallBack, aber VS erstellt die resx eben bei Erstellung neu). Deswegen ist die kompilierte Anwendung letztlich meines Wissens nicht mehr davon abhängig.

    Klar, das hätte man nun gerne in der MSDN direkt dokumentiert, ich kenne aber da nur die angegebenen Stellen (insbesondere der MSDN Blog).

     


    ciao Frank
    Mittwoch, 22. Juni 2011 12:59
  • Hallo Dominik,

    Das ">>"-Symbol wird seit .NET 2.0 in Zusammenhang mit dem sog. Visual Studio File Mode für Ressourcen verwendet. Anders als das vorherige Single File Mode, verwendet VSFM die Ressourcenvererbung, d.h. dass mit ">>" (&gt;&gt;) markierte Einträge nur in der Hauptressourcendatei vorhanden sind, nicht aber in den spezifisch lokalisierten RESX-Dateien. Es handelt sich um Property-Definitionen der Form-Objekte, Einträge also die mit der Lokalisierung an sich wenig zu tun haben und die man am besten nicht anrührt.

    Da Microsoft.Tools.WinRes.ResXFile (%programfiles%\Microsoft SDKs\Windows\[version]\bin\WinRes.exe) eine interne Klasse ist, und der Windows Forms Designer bzw. seine intern verwendeten Formate nicht für die Öffentlichkeit bestimmt sind (man will sich alle Optionen für zukünftige Änderungen freihalten), ist auch keine spezifische MSDN-Dokumentation zum Thema zu finden.

    Guy Smith-Ferrier - .NET Internationalization: The Developer's Guide to Building Global Windows and Web, Addison Wesley Professional, Kapitel 4: Windows Resource Localization Editor (WinRes)

    Gruß
    Marcel

    Mittwoch, 22. Juni 2011 16:18
    Moderator
  • Hallo Dominik,

    ja, AFAIK im Effekt letztlich nur für WinRes von Nöten (denn bei Ausführung der App gibt es ggf. ein FallBack, aber VS erstellt die resx eben bei Erstellung neu).

    Wie meinst du das mit den Neuerstellen bei der Erstellung? Gibt es da eine Projekteigenschaft das alle Ressourcendateien neu erstellt werden? Sobald am Dialog etwas geändert wird schreibt das Studio doch nur standardmäßig die resx Datei neu
    Freitag, 24. Juni 2011 06:59