Question

Comment transformer un site Web pour pouvoir gérer plusieurs langues (exemple: anglais, français, espagnol)?

Je n'aime pas le fichier de ressources car je me sens limité et il est assez long de construire la liste. Avez-vous des suggestions?

Mettre à jour

Pour le moment, le meilleur moyen que nous ayons trouvé est d'utiliser un fichier XML et avec quelques valeurs Xpath et get.

Était-ce utile?

La solution

La localisation implicite (dans le menu Visual Studio - Outils - Générer des ressources locales) est aussi simple que possible. Écrivez vos pages dans votre langue par défaut, choisissez l'option de menu et vos fichiers de ressources sont créés et peuvent être envoyés à quelqu'un pour les traduire.

Le fichier resx est simplement du code xml. Si l'entreprise de traduction le souhaite, vous pouvez le transformer facilement en feuilles de calcul.

Utiliser une base de données au lieu de resx comme magasin de sauvegarde n’est pas difficile. Rick Strahl a une bonne explication et un bon exemple de code pour un fournisseur de localisation piloté par une base de données ici - il y a aussi un bel éditeur de localisation intégré avec une interface pour les traductions de Google et Babelfish.

Autres conseils

Nous stockons des ressources pour des sites multilingues dans une base de données. Nous avons créé quelques outils pour faciliter leur création et leur accès. Il existe un ExpressionBuilder personnalisé qui nous permet d'utiliser cette syntaxe:

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

Et une étiquette personnalisée qui contient le texte par défaut et ajoute une ligne à la base de données s'il n'y en a pas déjà une.

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

La table contenant les chaînes contient une colonne par langue. Cela rend très facile la création du site en anglais (ou quelle que soit la langue par défaut), puis le transfert de la table (qui se remplit elle-même) à un traducteur. Il est également très facile de voir dans quelles langues vous avez besoin de faire traduire des documents. Avec les ressources, chaque fois que vous devez ajouter une nouvelle chaîne, vous devez arrêter ce que vous faites, puis accéder au fichier de ressources pour chaque langue et ajouter la ressource.

Voici le code de l'étiquette de langue:

''' <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

et la fonction utilitaire:

    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

Les fichiers de ressources sont la voie à suivre. Nous expédions notre produit en 12 langues. Nous extrayons toutes les chaînes dans des fichiers de ressources et les envoyons à une entreprise de traduction. C'est parfois pénible, mais c’est la façon de le faire de facto.

Cela devient également amusant lorsque des mots anglais de 4 lettres sont traduits en phrases de 17 lettres et que vous devez modifier votre interface utilisateur.

Vous êtes en retard dans le processus de conception? Si ce n’est pas trop tard et si le budget le permet, envisagez de transférer sur un système de gestion de contenu multilingue tel que Ektron CMS300.net . (qui a des outils de traduction intégrés). Sinon, vous avez une tâche énorme à accomplir.

Une autre solution que j’utilise consiste à créer les dossiers de langues contenant les pages aspx contenant tout le texte requis dans cette langue.

Le seul problème est de savoir comment insérer le moins de code possible dans les pages en cours de réplication. Pour ce faire, j'utilise un modèle de contrôleur, puis une source de données objet pour obtenir les données et les lier aux contrôles de toutes les pages.

De cette manière, j'ai atteint l'objectif d'éliminer les fichiers de ressources et je peux conserver le code au même endroit sans le répliquer (sauf si nécessaire).

Edit: Je recommanderais également un bon framework CMS.

L’une des applications Web que je développe a également cette exigence NLS.

J'ai constaté qu'il y a au moins trois endroits où vous avez des textes localisés:

  • interface utilisateur
  • tables de base de données ("catalogues" ou comme vous voulez les appeler)
  • code backend (services, etc.)

Ma solution comporte un tableau pour les pages, tableaux, etc. ("Conteneur"), un tableau pour chaque élément de ce conteneur (étiquettes, boutons par ID, identificateurs d'enregistrement) et un tableau pour les éléments traduits ( plus l'identifiant de langue).

Une application de traduction m'aide à maintenir les traductions à jour et exporte toutes les traductions au format XML.

Le produit est livré avec les traductions, mais les clients peuvent en ajuster les modifications, les modifications prenant effet immédiatement.

Exemple de code que j'ai utilisé à l'aide d'un fichier de ressources ajouter global.asax

 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-website-for-multilanguage.html

http://satindersinght.wordpress.com / 2012/06/14 / créer un site Web pour le support multilingue /

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top