当前位置:  开发笔记 > 编程语言 > 正文

ASP.NET多语言网站?

如何解决《ASP.NET多语言网站?》经验,为你挑选了2个好方法。

如何将网站转换为能够处理多语言(例如:英语,法语,西班牙语)?

我不喜欢资源文件,因为我觉得有限,而且构建列表的时间很长.你有什么建议吗?

更新

目前我们发现的最佳方法是使用XML文件和一些Xpath和get值.



1> martin..:

隐式本地化(在Visual Studio - 工具菜单 - 生成本地资源上)就像它可以一样简单.使用默认语言编写页面,选择菜单选项,然后创建资源文件并将其发送给某人进行翻译.

resx文件只是xml,因此如果翻译公司希望您可以轻松地将其转换为(和退出)电子表格.

使用数据库而不是resx作为后备存储并不困难.Rick Strahl在这里有一个很好的解释和示例代码,用于数据库驱动的本地化提供程序- 这里有一个很好的内置本地化编辑器,带有Google翻译和Babelfish的界面.



2> Herb Caudill..:

我们将多语言站点的资源存储在数据库中.我们已经创建了一些工具,可以轻松创建和访问这些工具.有一个自定义的ExpressionBuilder,允许我们使用这种语法:

 

以及包含默认文本的自定义标签,如果还没有,则向数据库添加一行.

 About Us

包含字符串的表每种语言有一列.这使得用英语(或任何默认语言)创建网站变得非常容易,然后将表格(填充自身)交给翻译.您还可以很容易地看到翻译内容所需的语言.使用资源,每次需要添加新字符串时,都必须停止正在执行的操作,然后转到每种语言的资源文件并添加资源.

这是语言标签的代码:

''' 
''' Retrieves a language-specific string.
''' 
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 , which we don't want in some situations
        writer.Write(Me.Text)
    End Sub

End Class

和效用函数:

    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

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有