Anlegen von Resx-Dateien via Code
-
Moin Leute,
ich habe mal wider ein Internationalisierungsproblem.
Ich habe ca 100 - 150 Dialoge und 25-50 sonstige Resx-Dateien. Jede Resx-Datei liegt in 4 verschiedenen Sprachen vor. Nun möchte ich jedoch eine weitere Sprache hinzufügen und habe keine Lust für jeden Dialog eine neue Resx-Datein anzulegen sondern möchte dieses per Code automatisiert machen lassen. Das anlegen der Datein bekomme ich auch hin jedoch werden sie nicht den Projektdatein hinzugefüt. Wisst Ihr wie ich auch dieses per Code hinbekomme?
MfG
blind1985
-
Du musst die Projektdatei editieren (endet mit *.csproj). Sollte relativ einfach sein, da es sich um eine XML-Datei handelt.
-
Das habe ich auch erst gedacht, jedoch sind die Ressourcendatein in folgenden Tags angegeben
Bei dialogen:
<EmbeddedResource Include="Dialog\AktivierungsDialog.da.resx"> <DependentUpon>AktivierungsDialog.cs</DependentUpon> </EmbeddedResource>
Und die Ohne:
<EmbeddedResource Include="Dialog\AktivierungsDialog.da.resx" />
und die werte die im Include stehen kann ich nicht mit nem XML-Parser lesen bzw setzen.
MfG
blind
-
Linq to XML ist dein Freund.
-
Kannst du mir ein kurzes Code beispiel geben wie ich bitte die csproject mit linq auslese? Ich habe leider noch nicht wirklich mit Linq gearbeitet.
MfG
blind
-
Das sind ganz normale XML Attribute, klar kannst du die mit einem XML Parser lesen und ersetzen.
Muss nicht LINQ to XML sein, jeder XML-Parser geht, nimm den mit dem du dich am besten auskennst.
-
blind schrieb:
Das anlegen der Datein bekomme ich auch hin jedoch werden sie nicht den Projektdatein hinzugefüt.
Du kannst resx-Dateien doch einfach vom Windows-Explorer ins Visual Studio ziehen. Wenn man sie auf den Knoten des entsprechenden Projekts legt werden sie den richtigen Forms automatisch zugeordnet.
-
Moin hustbaer,
eben nicht ich kann nicht auf alle Attribute des XML-Codes zugreifen und da liegt mein problem bei sonst hätte ich da keine Frage zu.
-
Ungetestet:
XNamespace Namespace = "http://schemas.microsoft.com/developer/msbuild/2003"; var itemGroups = XDocument.Load(...).Element(Namespace + "Project").Element(Namespace + "ItemGroup"); var elements = itemGroups.Where(group => group.Elements(Namespace + "EmbeddedResource").Any() || !group.HasElements);
Der Code liefert dir alle ItemGroup-Elemente die "EmbeddedResource"-Elemente enthalten oder leer sind. Wenn keines von beidem vorhanden ist muss man eine neue ItemGroup erzeugen und einhängen, zum Beispiel so:
XElement newItemGroup = new XElement(Namespace + "ItemGroup"); itemGroups.Last().AddAfterSelf(newItemGroup);
Ein neues Element erzeugt man z.B. so:
newItemGroup.Add(new XElement(Namespace + "EmbeddedResource", new XElement(Namespace + "DependentUpon", filePath), new XAttribute("Include", includePath)));
Was hier natürlich komplett fehlt ist Fehlerbehandlung. Wenn im ersten Codefragment, beispielsweise, irgendein Element nicht vorhanden sein sollte gibt es eine NullReferenceException etc.