3 Stimmen

.NET-Ressourcenhierarchie ohne Bezug zur Kultur

Ich habe einige String-Ressourcen, z.B. eine Benutzer-Begrüßungszeichenfolge. Standardmäßig sollte es "Hallo" sein, aber für Kunde X sollte es "Grüße" sein.

Ich möchte Folgendes verwenden .NETs Ressourcen-Implementierung und die Zeichenketten in Konstanten oder in Dateien oder wo immer ich will unterbringen. Außerdem passt das Hierarchiemodell zu meinen Bedürfnissen: Die Ressourcen von Kunde X haben Vorrang vor der Begrüßungszeichenkette des Benutzers.

Das einzige Problem - es scheint, dass die Ressourcen von .NET auf i18n ausgerichtet sind, und sie wählen aus der Hierarchie auf der Grundlage der aktuellen Kultur.

Im Moment werde ich die Ressourcen pro Kunde flach halten und die Hierarchie selbst abbilden, aber gibt es eine bessere Lösung?

2voto

Sam Saffron Punkte 124121

Es gibt wirklich nichts, was Sie daran hindert, mehrere ResourceManager zu haben, aber wie Sie sagen, wurde es für l18n entwickelt. Ich persönlich hatte viele Probleme mit dem resx-Zeug, besonders wenn es um Satelliten-Assemblies, GAC und Deployment ging. Das andere Problem, das ich habe, ist die Starrheit dieses Systems. Wenn man jemals einen neuen String braucht, muss man eine DLL neu kompilieren und sich mit XML herumschlagen, und die Kunden haben keine Flexibilität, wenn es darum geht, Dinge zu reparieren.

Die hierarchiebasierte Lösung, die das resx-Zeug hat, bedeutet, dass es von "en-US" auf "en" und schließlich auf invariant zurückgreift, mehr Rückgriffe gibt es nicht, und man kann nicht zwei verschiedene "en-US" in einer Ressourcendatei für dieselbe Zeichenfolge definieren. Sie könnten diese Lösung hacken, um "en-US" für Kunde X und "en-AU" für Kunde Y zu verwenden und dann als eine Ressource auszuliefern, aber das ist verdammt chaotisch.

Sie könnten für jeden Kunden eine andere Satellitenbaugruppe kompilieren und dies irgendwie zum Laufen bringen.

Ich persönlich bevorzuge eine datenbankgestützte Lösung für die Lokalisierung, entweder mit sqlite oder mssql, und stelle sicher, dass ich nach den ersten String-Lookups eine Zwischenspeicherung durchführe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X