Frage

Wie kann ich eine Website so umwandeln, dass sie mehrsprachig ist (Beispiel:Englisch, Französisch, Spanisch)?

Mir gefällt die Ressourcendatei nicht, weil ich das Gefühl habe, dass sie eingeschränkt ist, und es ziemlich lang ist, die Liste zu erstellen.Hast du irgendwelche Vorschläge?

Aktualisieren

Im Moment ist es unserer Meinung nach die beste Möglichkeit, eine XML-Datei zu verwenden und mit etwas Xpath Werte abzurufen.

War es hilfreich?

Lösung

Die implizite Lokalisierung (im Menü „Extras“ von Visual Studio – „Lokale Ressourcen generieren“) ist so einfach wie möglich.Schreiben Sie Ihre Seiten in Ihrer Standardsprache, wählen Sie die Menüoption und Ihre Ressourcendateien werden erstellt und können zur Übersetzung an jemanden gesendet werden.

Die Resx-Datei ist nur XML, sodass Sie sie auf Wunsch des Übersetzungsunternehmens problemlos in (und aus) Tabellenkalkulationen umwandeln können.

Die Verwendung einer Datenbank anstelle von Resx als Sicherungsspeicher ist nicht schwierig.Rick Strahl hat eine gute Erklärung und einen Beispielcode für einen datenbankbasierten Lokalisierungsanbieter Hier - Es gibt auch einen schönen integrierten Lokalisierungseditor mit Schnittstelle zu Google Translations und Babelfish.

Andere Tipps

Wir speichern Ressourcen für mehrsprachige Websites in einer Datenbank. Wir haben ein paar Tools erstellt, um das Erstellen und Zugriff auf diese zu erleichtern. Es gibt einen benutzerdefinierten Expressionbuilder, mit dem wir diese Syntax verwenden können:

 <asp:linkbutton runat='server' text='<%$ LanguageStrings:ClickMe%>' />

Und eine benutzerdefinierte Beschriftung, die den Standardtext enthält und der Datenbank eine Zeile hinzufügt, wenn es noch nicht einen gibt.

 <r:languagelabel runat="server" name="AboutUs">About Us</r:languagelabel>

Die Tabelle mit den Zeichenfolgen hat eine Spalte pro Sprache. Dies erleichtert es sehr einfach, die Site in Englisch (oder was auch immer die Standardsprache ist) zu erstellen und dann den Tisch (die sich selbst bevölkert) an einen Übersetzer abzugeben. Es ist auch sehr leicht zu sehen, für welche Sprachen Sie Dinge übersetzt haben. Bei Ressourcen müssen Sie jedes Mal, wenn Sie eine neue Zeichenfolge hinzufügen müssen, aufhören, was Sie tun, und dann zur Ressourcendatei für jede Sprache gehen und die Ressource hinzufügen.

Hier ist der Code für das Sprachetikett:

''' <summary>
''' Retrieves a language-specific string.
''' </summary>
Public Class LanguageLabel
    Inherits Label

    Private _Name As String
    Public Property Name() As String
        Get
            Return _Name
        End Get
        Set(ByVal value As String)
            _Name = value
        End Set
    End Property

    Private Sub Populate()
        If Len(Me.Name) > 0 Then
            Dim LanguageString As String = GetLanguageString(Me.Name, Me.Text)
            If Len(LanguageString) > 0 Then Me.Text = LanguageString
        End If
    End Sub

    Private Sub LanguageLabel_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
        Populate()
    End Sub

    Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
        ' By default a label wraps the text in a <span>, which we don't want in some situations
        writer.Write(Me.Text)
    End Sub

End Class

und die Dienstprogrammfunktion:

    Public Function GetLanguageString(ByVal Name As String, Optional ByVal DefaultText As String = "") As String
        Dim DefaultLanguage As Language = Languages.GetById(1)
        Name = StripPunctuation(Name).Trim.Replace(" ", "") ' Remove punctuation, spaces from name
        Dim SelectSql As String = String.Format("Select {0},{1} from LanguageStrings where Name=@Name", Languages.CurrentLanguage.Code, DefaultLanguage.Code)
        Dim LanguageStringTable As DataTable = ExecuteDataset(cs, CommandType.Text, SelectSql, New SqlParameter("@Name", Name)).Tables(0)
        If LanguageStringTable IsNot Nothing AndAlso LanguageStringTable.Rows.Count > 0 Then
            Dim LanguageText As String = LanguageStringTable.Rows(0)(Languages.CurrentLanguage.Code).ToString
            Dim DefaultLanguageText As String = LanguageStringTable.Rows(0)(DefaultLanguage.Code).ToString
            If Len(LanguageText) > 0 Then
                ' We have a string in this language
                Return LanguageText
            Else
                ' Nothing in this language - return default language value
                Return DefaultLanguageText
            End If
        Else
            ' No record with this name - create a dummy one
            If DefaultText = "" Then DefaultText = Name
            Dim InsertSql As String = String.Format("Insert into LanguageStrings (Name, {0}) values (@Name, @Text)", DefaultLanguage.Code)
            ExecuteNonQuery(cs, CommandType.Text, InsertSql, New SqlParameter("@Name", Name), New SqlParameter("@Text", DefaultText))
            Return Name
        End If
    End Function

Ressourcendateien sind der richtige Weg. Wir versenden unser Produkt in 12 Sprachen. Wir ziehen alle Zeichenfolgen in Ressourcendateien aus und versenden sie an eine Übersetzungsfirma. Es ist manchmal ein Schmerz, aber das ist die defaktische Art, dies zu tun.

Es macht auch Spaß, wenn 4-Buchstaben englische Wörter in 17 Buchstaben-Phrasen übersetzt werden und Sie Ihre Benutzeroberfläche optimieren müssen.

Wie spät im Designprozess sind Sie? Wenn nicht zu spät, und wenn das Budget es zulässt, sollten Sie auf ein mehrsprachiges CMS portieren wie EKTRON CMS300.NET (mit integrierten Übersetzungswerkzeugen). Wenn nicht, dann haben Sie eine große Aufgabe vor sich.

Eine andere Lösung, die ich verwende, besteht darin, die Sprachordner zu erstellen, die die ASPX -Seiten enthalten, die den gesamten erforderlichen Text in dieser bestimmten Sprache enthalten.

Das einzige Problem hierfür ist, wie Sie so wenig Code wie möglich in diese Replikationsseiten injizieren können. Ich verwende hier ein Controller -Muster, um dies zu tun, und dann eine Objektdatenquelle, um die Daten zu erhalten und an die Steuerelemente auf allen Seiten zu binden.

Auf diese Weise habe ich das Ziel erreicht, die Ressourcendateien loszuwerden, und kann den Code an einem Ort zurückhalten, ohne ihn zu replizieren (sofern nicht erforderlich).

Bearbeiten: Ich würde auch ein gutes CMS -Framework empfehlen.

Eine der Web -Apps, die ich entwickle, hat auch diese NLS -Anforderung.

Ich habe festgestellt, dass es mindestens 3 Orte gibt, an denen Sie lokalisierte Texte haben:

  • Benutzeroberfläche
  • Datenbanktabellen ("Kataloge" oder wie auch immer Sie sie nennen möchten)
  • Backend -Code (Dienste usw.)

Meine Lösung verfügt über eine Tabelle für die Seiten, Tabellen usw. ("Container"), eine Tabelle für jedes Element in diesem Container (z. .

Eine Übersetzungsanwendung hilft mir, die Übersetzungen auf dem neuesten Stand zu halten, und exportiert alle Übersetzungen in XML.

Das Produkt wird mit Übersetzungen geliefert, aber Kunden können die Übersetzungen anpassen und sich sofort in Kraft treten.

Beispielcode, das ich mithilfe von Ressourcendatei Global.asax hinzufügen habe

 void Application_BeginRequest(Object sender, EventArgs e)
    {
        // Code that runs on application startup
        HttpCookie cookie = HttpContext.Current.Request.Cookies["CultureInfo"];
        if (cookie != null &amp;&amp; cookie.Value != null)
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(cookie.Value);
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cookie.Value);
        }
        else
        {
            System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en");
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en");
        }
    }

http://satindersinght.blogspot.in/2012/06/create-tesite-for-multilanguage.html

http://satindersinght.wordpress.com/2012/06/14/create-tesit-for-multilanguage-support/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top