实现数据集本地化

在开发多语言应用程序时,本地化是一个重要的环节。本地化不仅仅是翻译文本,还包括数据格式、日期和时间等。在本文中,将探讨如何将数据集(DataSet)本地化,特别是如何使数据集的列标题根据用户的语言环境动态变化。

资源文件的使用

在应用程序中,可以将所有翻译后的表单文本放入资源文件中。当将数据集绑定到一个表格控件时,例如使用的Component One的TrueDBGrid,如果将表单设为可本地化的,那么表格的所有格式化都将依赖于语言环境。

理想的情况是,只希望列标题依赖于语言环境。接下来的问题就是,需要维护所有的表单。将数据字段标题的翻译放入数据集定义本身会更有意义。这正是使用Shawn Wildermuth的DataSet Generator的改进版本所做的。

使用方法

首先,请阅读之前关于继承数据集的文章。本文附带的DataSet Generator版本是进一步开发的版本。

生成代码的神奇之处在于以下代码片段:

Public Overridable Property Localizable() As Boolean Get Return Me._Localizable End Get Set(ByVal Value As Boolean) _Localizable = value If value Then Dim resourceManager As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(TestDataSet1)) Dim tableIndex As Integer Dim columnIndex As Integer Dim caption As String tableIndex = 0 Do While (tableIndex < Me.Tables.Count) columnIndex = 0 Do While (columnIndex < Me.Tables(tableIndex).Columns.Count) Try caption = resourceManager.GetString(String.Join(".", New String() {Me.Tables(tableIndex).TableName, Me.Tables(tableIndex).Columns(columnIndex).ColumnName, "Caption"})) Catch ex As System.Exception End Try If (Not (caption) Is Nothing) Then Me.Tables(tableIndex).Columns(columnIndex).Caption = caption End If columnIndex = (columnIndex + 1) Loop tableIndex = (tableIndex + 1) Loop End If End Set End Property

要使Caption属性依赖于语言,只需在与数据集生成的代码文件同名的.resx资源文件中放置翻译。如果数据集XSD文件名为DataSet1.xsd,生成的代码文件将命名为DataSet1.vb(如果在VB.NET项目中工作)。必须将文件命名为DataSet1.vb.resx, DataSet1.vb.nl.resx等添加到项目中。为了给一个好的开始,在测试项目中放置了一个小程序,它可以为创建这些文件,并用所有列的标题填充它们。只需在正确的表单上按下按钮即可。

选择权在手中

当然,并不总是想翻译所有的标题。访问资源文件可能会产生不必要的开销。首先,如果从资源文件中省略了标题翻译,就不会进行翻译工作。其次,只要不将Localizable属性设置为True(例如从Visual Studio的表单设计器中),就不会进行翻译工作。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485