自已研究并推荐的多语言方案

方法简介:使用自定义代码的方式来实现,如何使用自定义代码,请参考自定义代码节

在自定义代码中,在类下面加入相应的语言包,如

并加入如下的代码,方便在报表中调用,主要调用getRString

Public Class DayReportLanguage
    ”’ <summary>
    ”’ 固定名称的字段调用
    ”’ </summary>
    ”’ <returns></returns>
    ”’ <remarks></remarks>
    Public Shared Function getDate() As String
        Return My.Resources.DayReportLanguage.Table_Title_Date
    End Function
    ”’ <summary>
    ”’ 通用的名称调用,主要使用方法
    ”’ </summary>
    ”’ <param name=”pName”></param>
    ”’ <returns></returns>
    ”’ <remarks></remarks>
    Public Shared Function getRString(ByVal pName As StringAs String
        Return My.Resources.DayReportLanguage.ResourceManager.GetString(pName, My.Resources.Culture)
    End Function
End Class

首先在报表中需要引入此类

然后在报表中使用如下的语法调用

= ReportLanguage.DayReportLanguage.getRString(“Table_Title_Date”)    ‘命名空间.类名.方法名称()  主要使用静态方法,如果是实例对像,需要在报表中指定
在报表中调用时不需要传递语言参数,会自动识别当前线程的语言信息


其他三种可参考的实现多语言的方案:

1.通过编写多语言的RDLC(ReportViewer所承载的报表定义文件),然后根据不同的语言编程实现加载不同语言的报表定义文件,如Report.ZH-CN.rdlc等。

  【缺点:后续需要修改报表的情况下,需要同步修改多份报表定义,增加维护的难度】

2.通过把所有在Report中显示的所有标识类文本,都提出来作为参数的方式传递给报表,这样传进来的参数的值实现多语言就行了。

  【缺点:增加编写报表定义和编程的一些难度,参数列表会比较冗繁,维护难度也有所增加】

3.通过修改报表定义文档内容后,再通过ReportViewer动态加载报表定义来实现多语言。

  【缺点:修改报表定义是通过把RDLC当作XML文档来读取并修改相应的XMLNode节点内容,所以在性能方面有所损耗】