2015-07-03 3 views
8

Ich habe eine mehrsprachige Webanwendung. Ich konvertiere alle Kontrollen, d. H. Etiketten, Drop-Down, Text und Nachrichten mit Ressourcendatei.Wie können konfigurierbare Elemente in einer mehrsprachigen Webanwendung konvertiert und gespeichert werden?

Problem:

Zum Beispiel hat Registrierungsseite Dropdown von präfixkomprimiert Herr, Frau, Fräulein usw. Diese Präfix-Daten aus einer Tabelle kommt und konfigurierbar dh wir eine Konfigurations-Webseite für die mit gleich.

Es gibt viele andere konfigurierbare Dinge und entsprechende Seiten.

Meine Frage ist, wie man diese Daten in andere Sprache konvertiert und wie man dasselbe speichert, wie es mit Ressourcendatei nicht möglich ist.

Wer praktische Ideen hat, kann mich führen.

+0

Ist diese Mvc-Anwendung –

+0

Dies ist eine ASP-Webanwendung. – Veer

+0

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

Antwort

0

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; 
    
    +0

    Wo speichern Sie die übersetzten Zeichenfolgen? – Veer

    0

    die Ressourcenanbieter Erweiterung ist wahrscheinlich der Ansatz Sie nehmen wollen.

    Überprüfen Sie die folgenden Schritte aus:

    https://msdn.microsoft.com/en-us/library/aa905797.aspx (. Der Rahmen dieses Artikels ist ASP.Net WebForms, einen Blick auf die nehmen Abschnitt "Datenbank-Ressourcenprovider Building")

    http://weblogs.asp.net/thangchung/extending-resource-provider-for-soring-resources-in-the-database (dieser Blog-Post tatsächlich wendet an, was im obigen MSDN-Artikel behandelt wird, aber an ASP.Net MVC anstelle von WebForms.)

    Ich bin nicht sicher, welche Art von ASP.Net-Anwendung Sie erstellen, also dachte ich, es wäre wertvoll Fügen Sie Verweise für WebForms und MVC ein.

    Was in diesen beiden Referenzen erwähnt wird, sollte Ihnen eine gute Basis geben, auf der Sie Ihre eigene Lösung implementieren können.

    0

    Um Konfigurations Dinge zu speichern, die dynamisch von den Benutzern in Ressourcen eingetragen sind Sie IResourceWriter wie diese verwenden:

    IResourceWriter writer = new ResourceWriter("Resource.resx"); 
    // Adds resources to the resource writer. 
    writer.AddResource("String 1", "First String"); 
    writer.AddResource("String 2", "Second String"); 
    // Writes the resources to the file or stream, and closes it. 
    writer.Close(); 
    
    1

    Try XML-Format Ihrer lanuage

    <Controls> 
    <Control> 
    <DropDown> 
    <English>Cities</English> 
    <Urdu>شھر</Urdu> 
    <Arabic>البد</Arabic> 
    </DropDown> 
    </Control> 
    </Controls> 
    
    1

    Wenn es vom Benutzer konfiguriert werden, dann zu unterscheiden Es ist nicht praktisch, Ressourcendateien zu verwenden, denn Benutzer können alles konfigurieren, was sie benötigen.

    Also, wenn ich richtig verstanden habe, denke ich, die einzige praktische Lösung ist Übersetzungen in einer Tabelle für jeden Wert, den Benutzer eingeben.

    Da Benutzer Werte in jeder Sprache eingeben können, kann es schwierig werden.

    Ich würde eine Standard-Sprache wählen, sagen Englisch, so dass, wenn Benutzer die Werte verwalten (Titel oder Präfix in Ihrer Probe), sie sie paarweise verwalten müssen, d. H. Ihre Sprache und Englisch.

    Also, wenn das Gebietsschema Französisch ist, wenn sie den Index der Titel überprüfen, sehen sie zwei Spalten, eine für Französisch und eine für Englisch.

    Wenn der französische Benutzer zum ersten Mal die Ansicht eingibt, dann gibt es keine französischen Werte, daher muss der Benutzer die französische Übersetzung für die englischen Werte hinzufügen.

    Wenn der Benutzer einen neuen [französischen] Wert hinzufügt, muss er/sie auch die englische Übersetzung eingeben.

    Es sieht ein wenig umständlich und möglicherweise nicht sehr praktisch, aber es ist eine Option!

    Best,

    PD: Hey, teilen Sie bitte die Lösung, wenn Sie es bekommen!

    1

    Microsoft .NET bietet Unterstützung für das Arbeiten mit kulturspezifischen Informationen mit der CultureInfo-Klasse im System.Globalization-Namespace.Kulturinformationen können sowohl auf Seitenebene als auch auf Anwendungsebene festgelegt werden.

    <%@ Page language="C#" Culture="fr-FR"%> 
    

    Um die Kultur Informationen auf der Anwendungsebene festgelegt, die folgende in der Globalisierung Abschnitt der web.config-Datei verwenden.

    <configuration> 
    <system.web> 
        <globalization 
        culture="en-GB" 
        /> 
    </system.web> 
    </configuration> 
    

    dies versuchen,

    http://aspalliance.com/articleViewer.aspx?aId=957&pId=-1 
    
    0

    Zum Beispiel Registrierungsseite hat Drop-down von präfixkomprimiert Herr, Frau, Fräulein usw. Diese Daten Präfix aus einer Tabelle kommt und konfigurierbar dh ist Wir haben eine Konfigurationswebseite für das gleiche.

    Da die Werte der Dropdown in der Datenbank sind, denke ich, dass die Übersetzung auch in der Datenbank sein sollte.

    Der einfache Weg ist Weg, um ein Feld für jede Sprache in Ihrem titles Tisch zu haben ist:

    -------------------------- 
    | Id | TitleEn | TitleFr | 
    -------------------------- 
    | 1 | Mr  | M  | 
    | 2 | Mrs | Mme  | 
    | 3 | Miss | Mlle | 
    -------------------------- 
    

    Allerdings wird dies nicht gut skalieren, wenn Sie mehr Sprache haben oder wenn Sie wollen Sprachen in der Zukunft hinzufügen .

    So wie ich es wäre tun würde eine localized_string Tabelle wie folgt hinzuzufügen:

    -------------------------- 
    | Id | Language | String | 
    -------------------------- 
    | 7 | FR  | M  | 
    | 8 | FR  | Mme | 
    | 9 | FR  | Mlle | 
    | 7 | EN  | Mr  | 
    | 8 | EN  | Mrs | 
    | 9 | EN  | Miss | 
    -------------------------- 
    

    In Ihrem Titel-Tabelle und in allen anderen Tabellen, in denen Sie benötigen ein localized_string Sie speichern die ID der Zeichenfolge:

    ---------------------------- 
    | Id | localized_string_id | 
    ---------------------------- 
    | 1 | 7     | 
    | 2 | 8     | 
    | 3 | 9     | 
    ---------------------------- 
    

    Auf diese Weise können Sie die lokalisierte Zeichenfolge in einer beliebigen Sprache abfragen, und Sie können beliebig viele Sprachen hinzufügen, ohne das Datenbankschema zu ändern.