サテライト アセンブリを使用してローカライズされたサンドボックス ソリューションを展開する

ここでは、1 つ以上のアセンブリが含まれるサンドボックス ソリューションのローカライズ バージョンを作成する方法について説明します。

最終更新日: 2015年3月9日

適用対象: SharePoint Foundation 2010

ローカライズされたサンドボックス ソリューションを展開するプロセスは、ローカライズされたファーム ソリューションを展開する方法とはいくつかの点で異なります。

注意

このトピックでは、「ローカライズされた SharePoint ソリューションを作成する準備を行う」の手順に従って操作したこと、および英語とスペイン語が開発ファームで利用できることを前提としています (この言語のペアは他の言語に置き換えることができます)。

このトピックの例は簡単な Web パーツが含まれるサンドボックス ソリューションですが、ここで説明する方法 (サテライト アセンブリの作成) は、1 つ以上のアセンブリが含まれるすべてのサンドボックス ソリューションに適用されます。このトピックで説明する方法では、アセンブリ内のリソースのみがローカライズされます。フィーチャー ギャラリーに表示されるフィーチャーの名前と説明をローカライズする方法については、「[方法] サンドボックス ソリューションでフィーチャーの属性をローカライズする」を参照してください。

注意

サンドボックス ソリューションの .webpart ファイルの文字列は、ローカライズされたリソース ファイルがファーム ソリューションの一部としてファイル システムに個別にインストールされている場合にのみローカライズできます。これは、サンドボックス ソリューションを作成するほとんどの状況で、ターゲット ファームにファーム ソリューションをインストールする権限がないからです。この場合、サンドボックス ソリューションで .webpart ファイルをローカライズする方法は実質的にはありません。つまり、Web パーツ ギャラリーの Web パーツの名前はすべての言語のサイトで同じになります。

ローカライズされたリソース ファイルを作成するには

  1. Microsoft Visual Studio で、空の SharePoint プロジェクトを開始し、そのプロジェクトをサンドボックス プロジェクトにします。この例では、プロジェクトは LocalizedWebPart と呼ばれます。

  2. ソリューション エクスプローラーでプロジェクト名を右クリックし、[プロパティ] を選択します。

  3. [プロパティ] ウィンドウで [リソース] タブを開きます。

  4. ウィンドウの中央にある [このプロジェクトには既定の...] リンクをクリックします。ソリューション エクスプローラーの [プロパティ] フォルダーに Resources.resx ファイルが作成され、そのファイルが Visual Studio のリソース エディターで開きます。これにより、この既定のリソース ファイルには、ローカライズ文字列を提供しない言語のすべてのサイトで使用される文字列が含まれることになります。したがって、このファイルの文字列で使用される言語は、ほとんどの場合、文字列の翻訳を提供しない言語で SharePoint を使用するユーザーの第 2 言語になります。一般的には英語が使用されますが、例外もあります。たとえば、フィーチャーが主にフランスの旧植民地で使用される場合は、英語よりもフランス語の方が第 2 言語として使用されることが多いでしょう。このトピックの例では、既定の言語として英語を使用しています。

  5. プロジェクト内の Web パーツには 4 つの文字列が必要です。

    • ボタンのテキスト

    • ラベルの既定のテキスト

    • ボタンが偶数回クリックされたときのラベルのテキスト

    • ボタンが奇数回クリックされたときのラベルのテキスト

    次の名前と値の文字列をリソース ファイルに追加します。

    名前

    ButtonText

    このボタンをクリックしてください。

    EvenLabelText

    ボタンが偶数回クリックされました。もう一度クリックしてください。

    InitialLabelText

    ボタンはクリックされていません。

    OddLabelText

    ボタンが奇数回クリックされました。もう一度クリックしてください。

    提供するローカライズ文字列の外国語ごとに個別のリソース ファイルを作成し、ソリューション エクスプローラーの [プロパティ] フォルダーに追加する必要があります。この手順の以降の操作は、この作業を行う 1 つの方法について説明します。

  6. ソリューション エクスプローラーでプロジェクト名を右クリックして、[Windows エクスプローラーでフォルダーを開く] を選択します。

  7. [プロパティ] フォルダーを開きます。

  8. 提供するローカライズ文字列の外国語ごとに同じフォルダーに Resources.aspx ファイルを作成します。各ファイルには Resources.LCID.resx とうパターンに従って名前を付けます。ここで、LCID は言語カルチャ コードです。この例では、Resources.en-us.resx (英語用) と Resources.es-es.resx (スペイン語用) の 2 つのファイルを作成します。

  9. ソリューション エクスプローラーで、プロジェクト名を右クリックし、[追加] を選択して、[既存の項目] を選択します。参照ダイアログ ボックスが表示されます。このダイアログ ボックスには、現在のフォルダーとしてプロジェクト フォルダーが示されています。

  10. [プロパティ] フォルダーを開きます。

  11. 作成したすべての言語固有のリソース ファイルを選択し (既定の Resources.resx ファイルは除く)、[追加] をクリックします。ソリューション エクスプローラーでプロジェクトのルートにファイルが追加されます。

  12. ソリューション エクスプローラーで新しい言語固有のファイルをすべて選択し、[プロパティ] フォルダーにドラッグします。ファイルを上書きするかどうかを確認するメッセージが表示されたら、[はい] をクリックします。

  13. 外国語のファイルの 1 つをダブルクリックし、リソース エディターで開きます。

  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. 言語固有のリソース ファイルごとに前の 2 つの手順を繰り返します。

    注意

    (この例の Resources.en-us.resx ファイルのように) 言語固有のリソース ファイルの対象が、既定の言語として使用している言語の場合は、もちろんファイルを変更する必要がありません。多くの状況で、特にファイル内のリソースが文字列のみである場合は、既定の言語のリソース ファイルで使用されている言語と同じ言語の言語固有ファイルは必要ありません。しかし、リソース ファイルには画像、アイコン、ファイルなど、さまざまな種類のリソースが含まれていることがあります。場合によっては、既定のリソース ファイルで、任意の言語固有のファイルの対応するリソースとは異なる画像または他のリソースを使用する必要があります。

Resources クラスおよびサテライト アセンブリを作成し、ソリューション パッケージに追加するには

  1. Visual Studio で、[ビルド] メニューで [ソリューションのビルド] をクリックします。Visual Studio で、次の 2 つの処理が行われます。

    • MSIL (Microsoft Intermediate Language) コードが生成され、プロジェクトのメイン アセンブリに挿入されます。

      • Project.Properties という名前の新しい名前空間が作成されます。ここで、Project は Visual Studio プロジェクトの名前です。

      • Resources という名前のクラスが名前空間で宣言されます。

      • static プロパティが既定の言語リソース ファイルのすべての文字列の新しいクラスに追加されます。

    • 外国語ごとにプロジェクトのデバッグ フォルダーまたはリリース フォルダーのどちらかにサブフォルダーが作成されます。どちらに作成されるかはターゲットの構成によって異なります。このサブフォルダーには言語のロケール ID (LCID) の名前が付けられます。各フォルダーに Project.resources.dll という名前のアセンブリが含まれ、このアセンブリには言語のコンパイルされたバージョンの文字列が含まれます。これはサテライト アセンブリと呼ばれます。

  2. サテライト アセンブリはソリューション パッケージに追加する必要があります。ソリューション エクスプローラーで *.package ファイルをダブルクリックしてパッケージ デザイナーを開きます。

  3. デザイナーの下部にある [詳細設定] タブをクリックします。

  4. [追加] をクリックして、[既存のアセンブリの追加] を選択します。

    注意

    [プロジェクト出力からアセンブリを追加] をオンにしないでください。パッケージ デザイナーの目的において、サテライト アセンブリはプロジェクト出力としてカウントされません。

  5. [既存のアセンブリの追加] ダイアログ ボックスで省略記号 (...) ボタンをクリックし、デバッグ (またはリリース) フォルダーの下の言語サブフォルダーのサテライト アセンブリの 1 つに移動し、[開く] をクリックします。

  6. [展開ターゲット] は [GlobalAssemblyCache] のままにします (これは専門的事項です。サンドボックス ソリューションのアセンブリは、グローバル アセンブリ キャッシュには展開されません。詳細については、「サンドボックス ソリューション内のアセンブリが展開される場所」を参照してください)。

  7. [場所] ボックスで、言語サブフォルダーをサテライト アセンブリ名に付加します。たとえば、es-es サブフォルダー内のスペイン語のサテライト アセンブリの場合は、"es-es\" をアセンブリ名の前に追加します。完了後の [場所] の値は LCID\Project.resources.dll (例: es-es\LocalizedWebPart.resources.resx) になります。

    注意

    デバッグからリリースにターゲット構成を変更する準備が整ったら、プロジェクトからすべてのサテライト アセンブリを削除し、プロジェクトのリリース フォルダーの LCID サブフォルダーからそのアセンブリを再度追加する必要があります。ターゲット構成を頻繁に変更する必要がある場合は、デバッグ フォルダーおよびリリース フォルダーのピアとしてフォルダーを作成します。これらの LCID サブフォルダーを新しいフォルダーにコピーするビルド後スクリプトを作成し、次に、新しい場所のアセンブリをソリューション パッケージに追加します。ターゲット構成を変更するとき、変更する必要があるのはスクリプトだけです。

  8. サテライト アセンブリごとに前の 4 つの手順を繰り返し、すべてのファイルを保存します。

サンプルの Web パーツを作成し、ローカライズされた文字列を参照するには

  1. ソリューション エクスプローラーで SharePoint Web パーツ アイテムをプロジェクトに追加します。この例では、Web パーツには OneButton という名前が付いています。

  2. ソリューション エクスプローラーで Web パーツのコード ファイルを開きます。この例では C# が使用されているので、ファイルは OneButton.cs です。

  3. 次のコードで示すように、2 つの protected フィールドをカスタム Web パーツ クラスに追加します。

    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); 
    

    2 つの行により文字列が割り当てられます。そのために、この行は、Visual Studio によって生成されメイン アセンブリに挿入された Resources クラスのプロパティを参照します。各プロパティの get アクセサーは、現在の Web サイトの言語に関連付けられているサテライト アセンブリから文字列を返します。Web サイトの言語に対応するサテライト アセンブリがない場合は、既定のリソース ファイルで定義した文字列が返されます。

  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. 外国語の 1 つで作成されたサイト コレクションのソリューション ギャラリーにソリューション パッケージを展開し、ソリューションをアクティブ化します。

  2. [サイトの設定] ページに移動し、サイト コレクションまたはルート Web サイトのどちらかのフィーチャー ギャラリーを開きます。どちらのフィーチャー ギャラリーを開くかは、フィーチャーがサイトか Web のどちらを範囲としているかによって異なります (この例では、Web パーツが含まれるフィーチャーはサイトを範囲としてのみ展開されるので、サイトである必要があります)。

  3. フィーチャーをアクティブ化します。

  4. Web パーツ ページに移動し、Web パーツをページに追加して、使用します。Web パーツの文字列は Web サイトの言語で示されています。

  5. サテライト アセンブリを作成した外国語ごとに前の 4 つの手順を繰り返します。

  6. 言語固有のリソース ファイルを作成しなかった外国語サイト コレクションで、展開とアクティブ化を繰り返します。Web パーツの文字列は、既定のリソース ファイルに配置した文字列である必要があります。

関連項目

概念

ローカライズされた SharePoint ソリューションを作成する準備を行う

サンドボックス ソリューション内のアセンブリが展開される場所

サンドボックス ソリューションを開発するためのベスト プラクティス

その他の技術情報

サンドボックス ソリューションのローカライゼーション