Die Art und Weise, wie ich derzeit die Unterstützung mehrerer Sprachen in Anwendungen implementiere, geschieht durch die folgende Methode.
Erstellen Sie eine abstrakte Klasse namens Sprache, von der alle Sprachen erben.
Fügen Sie für jede Zeichenfolge, die übersetzt werden muss, eine abstrakte Zeichenfolge-Eigenschaft hinzu.
Jede Sprache, die von der Basissprachklasse erbt, gibt einfach die lokalisierte Version der Zeichenfolge zurück.
Erstellen Sie eine globale Eigenschaft zum Speichern der aktuell ausgewählten Sprachklasse.
Ruft Zeichenfolgenwerte ab, die von der globalen Eigenschaft übersetzt werden müssen, anstatt sie lokal zu setzen.
Obwohl das Hinzufügen der übersetzten Zeichenfolgen mühsam ist, finde ich, dass diese Methode sicherstellt, dass alle benötigten Teile übersetzt werden, während der UI-Code so einfach wie möglich gehalten wird.
Die Verwendung einer Basisklasse ermöglicht auch die Wiederverwendung von Methoden oder Eigenschaften, die in allen Sprachen verwendet werden können.
Um zu versuchen, einen grundlegenden Umriss zu geben, würde die Struktur so gehen.
// Basissprache Klasse
public abstract class Language
{
// Field to identify the language by.
public string Code {get; private set;}
// Contructor that takes language code as parameter
public Language(string code)
{
Code = code;
}
// Add the strings you want translating.
// Making them abstract means classes that inherit from
// this class must provide their own implementation of these strings.
public abstract string Hello {get;}
public abstract string Goodbye {get;}
}
// Beispiel Englisch Sprachkurs
public class en_gb : Language
{
// Constructor simply provides base class with the language code.
public en_gb() : base ("en_gb"){}
// By inheriting from Language these properties must be overridden.
// Visual Studio will add these properties for you, so you simply need to add the return value.
public override string Hello {get {return "Hello";} }
public override string Goodbye {get {return "Goodbye";} }
}
// Beispiel Spanisch Sprachkurs
public class es_sp : Language
{
// Constructor simply provides base class with the language code.
public es_sp() : base ("es_sp"){}
// By inheriting from Language these properties must be overridden.
// Visual Studio will add these properties for you, so you simply need to add the return value.
public override string Hello {get {return "Hola";} }
public override string Goodbye {get {return "Adiós";} }
}
Sie dann einfach eine globale Eigenschaft haben, irgendwo .
public Language CurrrentLanguage {get; set;}
Alle Elemente, die übersetzt werden müssen, können dann auf die CurrrentLanguage-Eigenschaft verweisen, um die gewünschte Zeichenfolge zurückzugeben.
XAML Beispiel:
<TextBlock Text="{Binding Source={StaticResource GlobalValues}, Path=CurrrentLanguage.Hello}" />
Codebeispiel:
Textbox1.Text = GlobalValues.CurrentLanguage.Hello;
Ist diese Mvc-Anwendung –
Dies ist eine ASP-Webanwendung. – Veer
Es hängt teilweise davon ab, für welche Sprachen Sie Übersetzungen erstellen möchten. Sobald sich die Sprache von LTR nach RTF ändert, ist ein Standardlayout (für alle Sprachen) für den Endnutzer nicht immer sinnvoll. Auch einige Sprachen übersetzen nicht direkt (oder machen Sinn). – Will