ASP.NET多语言网站的实现总结--全局化/本地化资源
随着“地球村”的发展,网站作为一种宣传工具,需要扩大用户群范围。本文根据实际工作,进行简单总结,望共同学习。 1.资源 资源文件实际是XML文件,其中包含要转换为不同语言或图像路径的字符串。 资源文件包含键/值对,每一对都是一个单独的资源。键名不区分大小写。 ASP.NET中的资源文件具有.resx扩展名。在运行时,.resx 文件将编译进一个程序集内。 ============================================================================================
vs有两类资源文件夹,即全局化资源和本地化资源。 (1)全局化资源 应用程序的全局资源位于一个名为App_GlobalResources的专用文件夹中,该文件夹位于应用程序的根目录下。 整个应用程序的所有页、用户控件等都可访问这些资源,因此全局资源通常用作共享资源。 应用表达式为:<%$ ... %>,它是ASP.NET2.0新增了一种声明性表达式语法,可在分析页之前将值替换到页中。 该表达式的具体应用格式为:<%$ Resources:全局资源文件名称, 资源key%>,如: 调用GetGlobalResourceObject方法以从全局资源文件中读取特定的资源,如: Button1.Text = GetGlobalResourceObject ( "ResourceGlobal" , "Button1Txt" ).ToString ( ); (2)本地化资源 本地资源在与应用文件同级的App_LocalResources文件夹下定义。 本地资源文件使得单个ASP.NET网页的资源比较容易管理,但不能在各页之间共享资源。即,本地化资源只应用与某一特定的应用文件(.aspx,.ascx,.master....) 此外,如果有许多页必须本地化为多种语言,则可能会创建大量本地资源文件。 ============================================================================================ RESX 文件遵循关联页、用户控件或母版页以及区域性定义的命名约定。 例如:与Index.aspx页一起有一个名为App_LocalResources的文件夹,本地资源就放在该文件夹中,该文件夹根据页的名称相应命名如下: Index.aspx.resx。非区域性特定资源文件 (默认) Index.aspx.en-us.resx。区域性特定资源文件(英语) Index.aspx.fr.resx。区域性特定资源文件(法语) 文件的基名称与页文件名相同,后跟语言和区域性名称,最后以扩展名 .resx 结尾 提示:Vs2008可以在设计视图编辑器中打开页、用户控件或母版页时,在“工具菜单”中提供一个名为“生成本地资源”的命令。该命令可自动创建默认区域性的本地资源文件。 若要创建其他语言的资源文件,可以在解决方案资源管理器中复制该文件,然后按照以下模式之一重命名它: 对于全局资源文件: name.language.resx (若该资源文件是默认区域性资源文件,可省略language项,即name.resx) name.language-culture.resx (如:globalResource.en-us.resx) 对于局部资源文件: pageOrControlName.extension.language.resx (如:default.aspx.zh-cn.resx或default.aspx.resx) pageOrControlName.extension.language-culture.resx (如:default.aspx.en-us.resx) 例如,如果创建名为globalResource.resx的全局资源文件,且该文件将翻译为英语,则请将复制的文件命名为globalResource.en-us.resx。 请注意,对于本地化资源文件,资源文件名是页或控件的名称(包括文件扩展名),后面是语言和区域性信息。 ================================================================================================
应用本地资源,有两种形式的资源表达式:显式和隐式 a.本地资源的隐式表达式 如果已为页创建了本地资源文件,则可以使用隐式本地化从该资源文件中为控件填充属性值。 使用隐式本地化时,ASP.NET读取资源文件并将资源与属性值相匹配。 在页上,对该控件的标记使用特殊的 meta 属性可指定隐式本地化。 resourcekey值与相应资源文件中的键相匹配,如果在资源文件中定义了某个属性值,则ASP.NET会用资源值替换该属性。 b.本地资源的显式表达式 与隐式本地化不同,必须为要设置的每个属性分别使用一个资源表达式。 该表达式采用以下形式,ResourceID是必需的:<%$ Resources: ResourceID %> 调用GetLocalResourceObject方法以从本地资源文件中读取特定的资源,如: Button1.Text =