2016-08-08 47 views
1

Ich habe eine C# -Anwendung, die mehrere Kulturtypen unterstützt. Ich habe eine resx-Datei für jede Sprache, und die Änderung des Kulturtyps ändert die resx-Datei, die ich verwende. Funktioniert super. Jetzt habe ich einen Client, der die Etiketten nicht mag, die ich benutzt habe. Sie sind in der en-US-Kultur, und ich möchte die resx für en-US unverändert lassen und so wie es für die meisten unserer Kunden ist, aber für diesen einen bestimmten Kunden gibt es eine Möglichkeit, seine Ressourcendatei zu ändern WÄHREND SIE noch Teil von en-US sein? Zum Beispiel, kann ich eine "en-US2" resx-Datei oder etwas ähnliches machen und darauf zeigen? Oder gibt es eine bessere Möglichkeit, mehrere verschiedene Resx-Dateien für die gleiche Sprache zu haben?mehrere Resx-Dateien für 1 Kultur

+1

Die [CultureAndRegionInfoBuilder] (https://msdn.microsoft.com/en-us/library/system.globalization.cultureandregioninfobuilder%28v=vs.110%29 .aspx? f = 255 & MSPPError = -2147217396) möglicherweise das, wonach Sie suchen, aber beachten Sie, dass die benutzerdefinierte Kultur [muss auf dem Zielcomputer registriert werden] (http://stackoverflow.com/a/17042843/43846) – stuartd

+0

1) Sie möchten möglicherweise mehrere Ressourcen für spezielle Clients verwenden. Wie MainResource.resx, MainResource.en-US.resx für alle und SpecialCase.resx, SpecialCase.en-US.resx für eine bestimmte. 2) oder wenn Sie die Bereitstellung für diesen bestimmten Client steuern, können Sie einfach die Ressource tauschen =) Wenn Sie wirklich eine Antwort möchten, fügen Sie weitere Informationen zu Ihrer Frage hinzu. –

+0

Oder Sie können direkt auf dem Client-Rechner bearbeiten. –

Antwort

0

Ich hatte eine ähnliche Frage mit der gleichen genauen Idee gestellt (here.) Grundsätzlich C# sollte mit einer einzigen Resources.resx verwendet werden, wo Sie es auskultieren. Von dem, was ich von all meiner Jagd gesammelt habe, haben Sie zwei Möglichkeiten: Fügen Sie alles in eine Datei (wie worksWelcomeText und employeeWelcomeText) oder erstellen Sie mehrere resx-Dateien und erstellen Sie ein Modell, um sie zu behandeln und geben Sie die benötigte Ressourcendatei:

Model (nicht notwendig, aber gute Praxis):

namespace Bot.Models 
{ 
    public class Dialog 
    { 
     internal static string Name { get; set; } 

     internal static string Culture { get; set; } 

     //Returns the rsource file name.culture.resx 
     internal static string ResourceFile { get { return $"{System.AppDomain.CurrentDomain.BaseDirectory}Properties\\{Name}. 
{Culture}.resx"; } } 
    } 
} 

ein Verfahren Construct Ihre Ressource aus der Datei abzurufen:

// You can do this in-line, just remember to reset your resex if you change the file 
    internal static string GetStrRes(string resourceStr) 
    { 
     //Gets your resource file 
     System.Resources.ResXResourceSet resxSet = new System.Resources.ResXResourceSet(Models.Dialog.ResourceFile); 

     string response = resxSet.GetString(resourceStr); 

     return response; 
    } 

die Modell params ein:

Models.Dialog.Name = "Worker"; 
Models.Dialog.Culture = "en-US"; 

Um das Modell zu verbrauchen:

// Returns content of string resource key, same as Resources.workerText 
await context.PostAsync(BotUtils.GetStrRes("RES_KEY"));