如何:通过使用附属程序集部署本地化的沙盒解决方案

本主题介绍如何创建包含一个或多个程序集的沙盒解决方案的本地化版本。

上次修改时间: 2015年3月9日

适用范围: SharePoint Foundation 2010

部署本地化沙盒解决方案的过程在某些方面与部署本地化服务器场解决方案的过程有所不同。

备注

本主题假定您已完成准备创建本地化的 SharePoint 解决方案中的步骤,并且您的开发服务器场中可以使用英语和西班牙语(但您可以替换不同的语言对)。

本主题中接下来的示例是一个包含简单 Web 部件的沙盒解决方案。但是,所介绍的方法(创建附属程序集)适用于包括一个或多个程序集的任何沙盒解决方案。只有程序集中 的资源会通过本主题中介绍的技术进行本地化。有关如何在功能库中显示功能时本地化该功能的名称和描述的信息,请参阅如何:本地化沙盒解决方案中的功能属性

备注

仅当本地化的资源文件已作为服务器场解决方案的一部分单独安装到文件系统中时,才能对沙盒解决方案的 .webpart 文件中的字符串进行本地化。在创建沙盒解决方案的大多数情况下,这是因为您无权在目标服务器场中安装服务器场解决方案。在此类情况下,没有切实可行的方法来本地化沙盒解决方案中的 .webpart 文件。这意味着 Web 部件库中的 Web 部件名称在所有语言的网站中均相同。

创建本地化的资源文件

  1. 在 Microsoft Visual Studio 中,启动一个"空白 SharePoint 项目"。使其成为沙盒项目。在接下来的示例中,将该项目称为 LocalizedWebPart。

  2. 在"解决方案资源管理器"中,右键单击项目名称,然后选择"属性"。

  3. 在"属性"窗口中,打开"资源"选项卡。

  4. 单击位于窗口中间的"此项目不"链接。将在"资源管理器"的"属性"文件夹中创建一个 Resources.resx 文件,并用 Visual Studio 的资源编辑器打开该文件。完成后,此默认资源文件将包含所有网站中使用的字符串,而您 打算为这些网站使用的语言提供字符串的本地化版本。所以,用于此文件中字符串的语言应该最有可能成为 SharePoint 用户的第二语言,您不打算为这些用户使用的语言提供字符串翻译。通常,英语会用于此用途,但也有例外情况。例如,如果您的功能主要用在以前是法国殖民地的国家/地区,则对您的用户而言,法语将成为比英语更常用的第二语言。本主题中接下来的示例将使用英语作为默认语言。

  5. 将包含在项目中的 Web 部件需要四个字符串:

    • 按钮文本

    • 标签的默认文本

    • 按钮被单击偶数次时的标签文本

    • 按钮被单击奇数次时的标签文本

    向资源文件中添加具有以下名称和值的字符串。

    名称

    ButtonText

    Click this button!

    EvenLabelText

    The button has been clicked an even number of times. Click it again.

    InitialLabelText

    The button has never been clicked.

    OddLabelText

    The button has been clicked an odd number of times. Click it again.

    现在,您必须为要为其提供本地化字符串的每种外语创建单独的资源文件,并将其添加到"解决方案资源管理器"的"属性"文件夹中。本过程的其余步骤是完成此任务的一种途径。

  6. 在"解决方案资源管理器"中,右键单击项目名称,然后选择"在 Windows 资源管理器中打开文件夹"。

  7. 打开"属性"文件夹。

  8. 对于要为其提供本地化字符串的每种外语,在同一文件夹中创建 Resources.aspx 文件的一个副本。应采用模式 Resources.LCID.resx 对每个文件命名,其中 LCID 是语言区域性代码。对于接下来的示例,创建两个文件:用于英语的 Resources.en-us.resx 和用于西班牙语的 Resources.es-es.resx。

  9. 在"解决方案资源管理器"中,右键单击项目名称,选择"添加",再选择"现有项目"。将打开浏览对话框,其中以项目文件夹作为当前文件夹。

  10. 打开"属性"文件夹。

  11. 选择您创建的特定语言的所有资源文件(但不包括默认 Resources.resx 文件),然后单击"添加"。在"解决方案资源管理器"中,这些文件将被添加到项目的根目录中。

  12. 在"解决方案资源管理器"中选择特定语言的所有新文件并将其拖到"属性"文件夹中。系统会提示您指明是否覆盖文件。单击"是"。

  13. 双击其中一个外语文件,以在资源编辑器中打开该文件。

  14. 将每行中的"值"替换为其翻译。*请勿更改"名称"列中的任何内容。*对于以下示例中的 Resources.es-es.resx 文件,请使用以下西班牙语字符串。

    名称

    ButtonText

    ¡Presiona este botón!

    EvenLabelText

    El botón ha sido presionado un número de veces par. Presiónalo nuevamente

    InitialLabelText

    El botón nunca ha sido presionado.

    OddLabelText

    El botón ha sido presionado un número de veces impar. Presiónalo nuevamente.

  15. 对于特定语言的每个资源文件,重复最后两个步骤。

    备注

    当特定语言的资源文件所针对的语言与默认语言相同时(在以下示例中为 Resources.en-us.resx 文件),您当然不需要对文件进行任何更改。在许多情况下,尤其是在文件中的唯一资源是字符串时,不必对资源文件中与默认语言相同的语言使用特定语言的文件。但资源文件还可以包含图像、图标、文件和其他类型的资源。有时候,需要默认资源文件来使用与任何 特定语言的文件中的对应资源不同的图像或其他资源。

创建 Resources 类和附属程序集并将其添加到解决方案包中

  1. 在 Visual Studio 中的"生成"菜单上,选择"生成解决方案"。Visual Studio 会执行两项操作:

    • 生成 MSIL(Microsoft 中间语言)代码并将其插入项目的主程序集中:

      • 创建名为 Project.Properties 的新命名空间,其中 Project 是 Visual Studio 项目的名称。

      • 在该命名空间中声明一个名为 Resources 的类。

      • 为默认语言资源文件中的每个字符串向新类中添加 static 属性。

    • 对于每种外语,根据您的目标配置,在项目的"调试"或"发布"文件夹下创建一个子文件夹,并用该语言的区域设置 ID (LCID) 命名它。在其中每个文件夹中都有一个名为 Project.resources.dll 的程序集,其中包含语言字符串的编译版本。这些程序集称为附属程序集。

  2. 必须将附属程序集添加到解决方案包中。在"解决方案资源管理器"中,双击 *.package 文件,以在"包设计器"中打开该文件。

  3. 单击设计器底部的"高级"选项卡。

  4. 单击"添加",然后选择"添加现有程序集"。

    备注

    请勿选择"从项目输出中添加程序集"。为了"包设计器",附属程序集不计为项目输出。

  5. 在"添加现有程序集"对话框中,单击省略号 (...) 按钮并导航到"调试"(或"发布")下语言子文件夹中的某个附属程序集。单击"打开"。

  6. 将"部署目标"保留为"GlobalAssemblyCache"。(这是技术问题。沙盒解决方案中的程序集不会部署到全局程序集缓存中。有关详细信息,请参阅沙盒解决方案中的程序集部署在何处?。)

  7. 在"位置"框中,必须将语言子文件夹附加到附属程序集名称中。例如,对于 es-es 子文件夹中的西班牙语附属程序集,将在该程序集名称前添加"es-es\"。完成后,"位置"值将为 LCID\Project.resources.dll;例如,es-es\LocalizedWebPart.resources.resx。

    备注

    当您准备将目标配置由"调试"更改为"发布"时,必须从项目中删除所有附属程序集,重新生成这些附属程序集,然后再从项目的"发布"文件夹的"LCID"子文件夹中重新添加它们。如果必须经常更改目标配置,请创建一个文件夹作为"调试"和"发布"对等文件夹。创建可将这些 LCID 子文件夹复制到新文件夹的后生成脚本。然后将新位置中的程序集添加到解决方案包中。在更改目标配置时,只需要更改脚本。

  8. 对每个附属程序集重复最后四个步骤,并保存所有文件。

创建示例 Web 部件并引用本地化字符串

  1. 在"解决方案资源管理器"中,向项目中添加一个 SharePoint"Web 部件"项。在接下来的示例中,将该 Web 部件命名为 OneButton。

  2. 在"解决方案资源管理器"中,打开 Web 部件的代码文件。在接下来的示例中,使用的是 C#,所以文件为 OneButton.cs。

  3. 向自定义 Web 部件类中添加两个 protected 字段,如以下代码所示。

    protected Button button1;
    protected Label label1;
    
  4. 向 CreateChildControls 方法中添加以下代码。

    button1 = new Button();
    label1 = new Label();
    
    button1.Text = Properties.Resources.ButtonLabel;    
    label1.Text = Properties.Resources.InitialLabelText;
    
    button1.Click += new EventHandler(button1_Click);
    
    Controls.Add(button1);
    Controls.Add(new LiteralControl("<br />"));
    Controls.Add(label1); 
    

    请注意,这两行代码通过引用由 Visual Studio 生成并插入主程序集的 Resources 类中的属性来指定字符串。其中每个属性的 get 取值函数都会从与当前网站语言关联的附属程序集中返回一个字符串。如果网站语言没有附属程序集,则返回您在默认资源文件中定义的字符串。

  5. 向自定义 Web 部件类中添加以下事件处理程序。

    void button1_Click(object sender, EventArgs e)
    {           
        if ((label1.Text == Properties.Resources.InitialLabelText) 
             || (label1.Text == Properties.Resources.EvenLabelText))
        {
            label1.Text = Properties.Resources.OddLabelText;
        }
        else
        {
            label1.Text = Properties.Resources.EvenLabelText;
        }       
    }
    
  6. 生成解决方案并将其打包。

测试本地化

  1. 将解决方案包部署到用一种外语创建的网站集的解决方案库中,并激活该解决方案。

  2. 导航到"网站设置"页,并根据功能的范围是"网站"还是"Web"打开网站集或根网站的功能库。(在接下来的示例中,由于只应在"网站"范围部署包含"Web 部件"的功能,所以范围必须是"网站"。)

  3. 激活功能。

  4. 导航到任何 Web 部件页,向该页中添加 Web 部件并使用它。其字符串应使用网站的语言。

  5. 对为其创建了附属程序集的每种外语重复最后四个步骤。

  6. 没有 为其创建特定语言的资源文件的某些外语网站集重复部署和激活。Web 部件的字符串应该是您放入默认资源文件中的字符串。

请参阅

概念

准备创建本地化的 SharePoint 解决方案

沙盒解决方案中的程序集部署在何处?

开发沙盒解决方案的最佳实践

其他资源

沙盒解决方案的本地化