本地化 SharePoint 解决方案

准备应用程序以使其可在全球范围内使用的过程称为本地化。 本地化是将资源转换为特定区域性。 有关详细信息,请参阅对应用程序进行全球化和本地化。 本主题概述如何本地化 SharePoint 解决方案。

若要本地化解决方案,请从代码中删除硬编码的字符串,并将它们提取到资源文件中。 资源文件是基于 XML 的文件,扩展名为 .resx。 资源文件包含解决方案中所使用字符串的转换版本。 有关详细信息,请参见应用程序中的资源

注意

仅将字符串资源添加到 SharePoint 解决方案资源文件。 尽管可以在资源编辑器中添加非字符串资源,但非字符串资源不会部署到 SharePoint。

资源文件

有三种类型的资源文件:默认、非限定语言和特定语言。

资源文件类型 说明
默认 默认资源文件也称为回退资源,其中包含针对默认区域性(例如英语)本地化的字符串。 如果找不到指定语言的本地化资源文件,则使用这些文件。 默认资源没有单独的文件,它们存储在主应用程序程序集中。
非限定语言 一种包含针对某种语言(但不针对特定区域性)本地化的字符串的资源文件。 例如,“fr”表示法语。
特定于语言 一种包含针对某种语言和某个区域性本地化的字符串的资源文件。 例如,“fr-CA”表示加拿大法语。

有关详细信息,请参阅用于本地化的资源的分层组织

若要在 Visual Studio 中开发的 SharePoint 项目中指定默认资源文件,请在添加资源文件时在“添加资源”对话框的区域性列表中选择“固定语言(固定国家/地区)”。

添加资源文件

用于添加资源文件的命令位于“解决方案资源管理器”中解决方案节点和功能节点的快捷菜单上。

将全局资源文件添加到 SharePoint 解决方案

  1. 在 Visual Studio 中打开一个 SharePoint 解决方案。

  2. 在“解决方案资源管理器”中选择 SharePoint 项目节点,然后在菜单栏上依次选择“项目”>“添加新项”。

  3. 在“添加新项”对话框中,选择“全局资源文件”模板,然后选择“添加”按钮。

    注意

    “全局资源文件”项目项模板仅在选择 SharePoint 项目项时显示。

  4. 在“添加资源”对话框中,选择资源文件的区域性,例如英语(美国)。

    此步骤将全局资源文件添加到解决方案,格式为 {Resource_x_}.{culture}.resx,例如 Resource1.en-US.resx。

  5. 当“资源编辑器”在 Visual Studio 中打开时,将资源添加到资源文件。

将功能资源文件添加到 SharePoint 功能

  1. 如果 SharePoint 解决方案尚未在 Visual Studio 中打开,请打开解决方案。

  2. 在“解决方案资源管理器”中,打开“功能”节点下功能名称的快捷菜单,然后选择“添加功能资源”。

    此步骤将资源文件添加到功能,格式为 {ResourceFileName}.{culture}{.resx},例如 Feature1.en-US.resx。

  3. 当“资源编辑器”在 Visual Studio 中打开时,将资源添加到资源文件。

本地化 Visual Studio SharePoint 解决方案

本地化解决方案时,应考虑解决方案向用户显示的所有文本信息。 必须转换信息性消息、错误消息和 UI 字符串,并将这些转换放置在资源文件中。

资源文件中的每个字符串都具有唯一标识符。 每个资源文件中的已转换字符串应使用相同的标识符。 例如,如果“String1”是默认资源文件中第一个字符串的标识符,则特定语言资源文件中的第一个字符串也使用相同的标识符。

在 Visual Studio SharePoint 应用程序中,通常有三个区域可以本地化:功能、ASPX 页标记和代码。 为了便于说明,以下部分假设你有一个要本地化为德语和日语的 SharePoint 解决方案。 默认语言为英语。

本地化功能

若要本地化功能,必须将功能的硬编码标题和描述替换为在本地化资源文件中引用已转换标题和字符串的表达式。 你可以在 Visual Studio 的功能设计器中进行此更改。

若要将英语功能本地化为德语和日语,请向项目添加三个资源文件项目项:一个用于英语,一个用于德语,一个用于日语。 功能资源文件不能用于本地化 ASPX 标记或代码,它们需要有单独的资源文件。

创建功能资源文件后,向其中添加已转换的字符串。 使用以下格式的表达式访问本地化字符串:

$Resources:String ID

Visual Studio 中的功能资源始终命名为 Resources。 如果选择固定语言以外的语言,则会将区域性 ID 添加到资源文件名中。 例如,如果添加固定语言(默认)功能资源文件,则资源文件名为 Resources.resx。 如果通过选择日语(日本)的区域性来添加特定语言的功能资源,则资源文件名为 Resources.ja-JP.resx。 功能资源文件名是自动分配的,无法更改。

功能资源的范围局限于它们所添加到的功能。 若要创建解决方案中的任何功能或元素文件均可使用的资源,请添加“全局资源文件”项目项,而不是功能资源文件。 “全局资源文件”项目项位于“添加新项”对话框中 SharePoint 下的 2010 文件夹中 。 全局资源文件部署到 SharePoint 根文件夹的 \Resources 文件夹。

本地化功能

  1. 在“解决方案资源管理器”中,打开“Feature1”节点的快捷菜单,然后选择“添加功能资源”。

  2. 在“添加资源”对话框中,从列表中选择“固定语言”作为默认语言功能资源文件的区域性语言。

  3. 对每种本地化语言重复先前的步骤,同时对本地化的功能资源文件选择所需的语言。

    将创建单独的功能资源文件:一个用于默认语言,另一个用于您希望支持的每种本地化语言。

  4. 在资源编辑器中打开每个资源文件,并输入所有字符串 ID 及其值。

    例如,在默认功能资源文件中,输入值为“我的功能标题”的“标题”的字符串 ID,以及值为“我的功能说明”的“说明”的另一个字符串 ID。 对于每个本地化的资源文件,使用默认功能资源文件中所使用的相同字符串 ID,但为值输入本地化的字符串。

  5. 在输入所有资源值后,打开功能(例如 Feature1.feature)的快捷菜单,然后选择“查看设计器”以在功能设计器中打开功能。

  6. 若要本地化功能中的“标题”和“说明”字段,请使用以下格式在其框中输入值:

    $Resources:字符串 ID

    例如,在“功能标题”框中输入 $Resources:Title,并在“功能说明”框中输入 $Resources:Description。

    字符串 ID 必须与资源文件中使用的字符串 ID 匹配。

  7. 选择 F5 键生成并运行应用程序。

  8. 在 SharePoint 中,打开“站点操作”菜单,选择“站点设置”,然后在“站点操作”部分中选择“管理站点功能”链接。

  9. 在 SharePoint 中,从默认值更改显示语言。

    本地化功能标题和说明显示在应用程序中。 若要显示本地化资源,SharePoint 服务器必须已安装与资源文件的区域性匹配的语言包。

本地化 ASPX 页标记

若要本地化 ASP.NET 页面,请向项目添加三个资源文件项目项:一个用于英语,一个用于德语,一个用于日语。 如果除了标记外无需本地化代码,可以添加全局资源文件。

ASP.NET (.aspx) 页通常使用硬编码的字符串值。 若要本地化这些字符串,请将其替换为引用本地化资源的表达式。

本地化 ASPX 标记

  1. 添加单独的资源文件:一个用于默认语言,另一个用于每种本地化语言。

    如果要仅本地化标记而不是代码,请添加全局资源文件项目项。 如果要本地化代码和标记,请添加资源文件项目项。

    1. 若要添加全局资源文件,请在“解决方案资源管理器”中打开 SharePoint 项目项的快捷菜单,然后选择“添加”>“新建项”。 在 SharePoint“2010”节点下,选择“全局资源文件”模板。

    2. 若要添加资源文件,请在“解决方案资源管理器”中打开 SharePoint 项目项的快捷菜单,然后选择“添加”>“新建项”。 选择“资源文件”模板。

    注意

    请确保将资源文件添加到 SharePoint 项目项以启用“部署类型”属性。 稍后在此过程中需要此属性。 如果解决方案没有 SharePoint 项目项,可以添加空的 SharePoint 项目并删除其默认的 Elements.xml 文件。

  2. 请为默认语言资源文件指定一个你选择的名称,并追加 .resx 扩展名,如 MyAppResources.resx。 对每个本地化资源文件使用同一基名称,但添加区域性 ID。 例如,将德语本地化资源命名为 MyAppResources.de-DE.resx。

  3. 将每个资源文件的“部署类型”属性值更改为“AppGlobalResource”,使每个文件都部署到服务器的 App_GlobalResources 文件夹。 App_GlobalResources 文件夹位于 C:\inetpub\wwwroot\wss\VirtualDirectories\<port number>\App_GlobalResources。

  4. 如果要使用资源来本地化除 ASPX 标记之外的代码,请将每个文件的“生成操作”属性的值保留为“嵌入的资源”。 如果仅使用资源文件来本地化标记,可以选择将文件的属性值更改为“内容”。 有关详细信息,请参阅本地化 SharePoint 解决方案

    注意

    如果使用非全局资源文件,请将它们移到项目项文件夹中以启用“部署类型”属性和 SharePoint 特定的其他属性。

  5. 在每个文件中使用相同的字符串 ID,打开每个资源文件并添加已本地化的字符串。

  6. 在 ASPX 页或控件的 XML 标记中,将硬编码的字符串替换为使用以下格式的值:

    <%$Resources:Resource File Name, String ID%>
    

    例如,若要本地化应用程序页上标签控件的文本,可以更改:

    <asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <asp:Label ID="lbl" runat="server" Text="Label text"></asp:Label>
    </asp:Content>
    

    to

    <asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server">
    <asp:Label ID="lbl" runat="server" Text="<%$Resources:MyAppResources,String1%>"></asp:Label>
    </asp:Content>
    
  7. 选择 F5 键生成并运行应用程序。

  8. 在 SharePoint 中,从默认值更改显示语言。

    本地化字符串将显示在应用程序中。 若要显示本地化资源,SharePoint 服务器必须已安装与资源文件的区域性匹配的语言包。

本地化代码

除了本地化功能字符串和 ASP.NET 标记,还必须本地化出现在解决方案代码中的消息字符串和错误字符串。 本地化的信息性消息和错误消息包含在附属程序集中。 附属程序集包含对用户可见的字符串,例如 UI 文本和输出消息(例如异常)。

Visual Studio 使用标准 .NET Framework 中心和分支模型。 中心(即主程序程序集)包含默认语言资源。 分支(即附属程序集)包含语言特定的资源。 有关详细信息,请参阅打包和部署资源。 附属程序集从资源 (.resx) 文件进行编译。 将语言特定的资源文件添加到项目和解决方案包时,Visual Studio 会将资源文件编译到名为 {Project Name}.resources.dll 的附属程序集中。

本地化代码

  1. 在“解决方案资源管理器”中,打开一个项目项的快捷菜单,然后选择“添加”>“模块”。

    选择“资源文件”模板。

    注意

    请确保将资源文件添加到 SharePoint 项目项,以便“部署类型”属性可用。 稍后在此过程中需要此属性。

  2. 为默认语言资源文件指定一个你选择的名称,并追加 .resx 扩展名,如 MyAppResources.resx。

  3. 重复步骤 1 和步骤 2,向 SharePoint 项目项添加单独的资源文件:每种本地化语言各对应一个文件。

    对每个本地化资源文件使用同一基名称,但添加区域性 ID。 例如,将德语本地化资源命名为 MyAppResources.de-DE.resx。

  4. 打开每个资源文件,并添加已本地化的字符串。 在每个文件中使用相同的字符串 ID。

  5. 将每个资源文件的“部署类型”属性值更改为“AppGlobalResource”,使每个文件都部署到服务器的 App_GlobalResources 文件夹。

  6. 将每个文件的“生成操作”属性值保留为“嵌入的资源”。

    嵌入的资源将编译到项目的 DLL 中。

  7. 生成项目以创建资源附属 DLL。

  8. 在“包设计器”中,选择“高级”选项卡,然后添加附属程序集。

  9. 在“位置”框中,在位置路径前面添加区域性 ID 文件夹,例如 de-DE\<项目项名称>.resources.dll。

  10. 如果解决方案尚未引用 System.Web 程序集,请添加对该程序集的引用,并在代码中向 System.Web 添加一个指令。

  11. 在你的代码中找到用户可见的所有硬编码的字符串,如 UI 文本、错误和消息文本。 使用以下语法将这些字符串替换为对 GetGlobalResourceObject 方法的调用:

    HttpContext.GetGlobalResourceObject("Resource File Name", "String ID")
    
  12. 选择 F5 键生成并运行应用程序。

  13. 在 SharePoint 中,从默认值更改显示语言。

    本地化字符串将显示在应用程序中。 若要显示本地化资源,SharePoint 服务器必须已安装与资源文件的区域性匹配的语言包。

未本地化的代码使用硬编码字符串值。 若要对代码字符串进行本地化,请将其替换为对 GetGlobalResourceObject 的调用,这是引用本地化资源的方法。

Web 部件代码本地化

Web 部件包括自定义属性编辑器功能,其中包括使用硬编码字符串的代码特性,如 WebDisplayName、Category 和 WebDescription。 若要替换这些特性的字符串值,请创建一个从该特性的类派生的单独类。 在这些类中,设置特性的属性。 特性的属性取决于基类。 例如,WebDisplayName 特性的属性为 DisplayNameValue,WebDescription 特性的属性为 DescriptionValue。

在派生类中,引用资源文件中的字符串 ID 和 ResourceManager 对象,以获取字符串 ID 的本地化值。 将此值返回到属性编辑器特性。

另请参阅