Pergunta

Como posso transformar um site para poder lidar com o Multi Li language (exemplo: inglês, francês, espanhol)?

Não gosto do arquivo de recursos porque me sinto limitado e é muito longo para construir a lista. Você tem alguma sugestão?

Atualizar

No momento, a melhor maneira que encontramos é usar um arquivo XML e com alguns valores XPath ET GET.

Foi útil?

Solução

A localização implícita (no menu do Visual Studio - Ferramentas - gera recursos locais) é o mais fácil possível. Escreva suas páginas no seu idioma padrão, escolha a opção de menu e seus arquivos de recursos são criados e podem ser enviados a alguém para traduzir.

O arquivo RESX é apenas XML; portanto, se a empresa de tradução desejar, você poderá transformá -lo em planilhas (e fora) facilmente.

Usar um banco de dados em vez de RESX, pois sua loja de apoio não é difícil. Rick Strahl tem uma boa explicação e código de exemplo para um provedor de localização orientado a banco de dados aqui - Há um bom editor de localização embutido também com interface para o Google Translations e Babelfish.

Outras dicas

Armazenamos recursos para sites multilíngues em um banco de dados. Criamos algumas ferramentas para facilitar a criação e acesso a elas. Existe um Builder de Expression Custom que nos permite usar esta sintaxe:

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

E um rótulo personalizado que contém o texto padrão e adiciona uma linha ao banco de dados, se ainda não houver um.

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

A tabela que contém as cordas possui uma coluna por idioma. Isso facilita a criação do site em inglês (ou qualquer que seja o idioma padrão) e depois entregue a tabela (que se preenche) a um tradutor. Também é muito fácil ver quais idiomas você precisa ter coisas para traduzir. Com os recursos, toda vez que você precisa adicionar uma nova string, você precisa interromper o que está fazendo e, em seguida, vá para o arquivo de recursos para cada idioma e adicionar o recurso.

Aqui está o código para o rótulo do idioma:

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

e a função de utilidade:

    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

Arquivos de recursos são o caminho a percorrer. Enviamos nosso produto em 12 idiomas. Puxamos todas as cordas em arquivos de recursos e os enviamos para uma empresa de tradução. Às vezes é uma dor, mas essa é a maneira de desfacto de fazê -lo.

Também é divertido quando as palavras em inglês de 4 letras são traduzidas em frases de 17 letras e você precisa ajustar sua interface do usuário.

Com que atraso no processo de design você está? Se não for tarde demais, e se o orçamento permitir, considere portar um CMS multilíngue como Ektron cms300.net (que possui ferramentas de tradução integradas). Caso contrário, você tem uma tarefa enorme pela frente.

Outra solução que estou usando é criar as pastas de idiomas que contêm as páginas ASPX que contêm todo o texto necessário nesse idioma específico.

O único problema aqui é como você pode injetar o mínimo de código possível nessas páginas de replicação. Estou usando um padrão de controlador aqui para fazer isso e, em seguida, uma fonte de dados de objeto para obter os dados e vinculá -los aos controles em todas as páginas.

Dessa forma, atingi o objetivo de me livrar dos arquivos de recursos e posso manter o código para trás em um só lugar sem replicá -lo (a menos que seja necessário).

EDIT: Eu recomendaria uma boa estrutura do CMS também.

Um dos aplicativos da Web que desenvolvo também tem esse requisito do NLS.

Descobri que existem pelo menos três locais onde você tem textos localizados:

  • interface de usuário
  • Tabelas de banco de dados ("catálogos" ou como você quiser chamá -las)
  • Código de back -end (serviços etc.)

Minha solução possui uma tabela para as páginas, tabelas, etc ("contêiner"), uma tabela para cada item nesse contêiner (por exemplo, etiquetas, botões por id, identificadores de registro) e uma tabela para os itens traduzidos (mais identificador de idioma) .

Um aplicativo de tradução me ajuda a manter as traduções atualizadas e exporta todas as traduções no XML.

O produto é enviado com traduções, mas os clientes podem ajustar as traduções, mudanças em vigor imediatamente.

Código de exemplo que fiz usando o arquivo de recursos Adicionar 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/create-website-for-multilanguage-support/

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top