0

私は私たちのサイトのコントロールを備えたコンポーネントプロジェクトを持っています-それは今ローカライズ可能でなければなりません。サイトの残りの部分のローカリゼーションを設定することは問題ではありませんでした(.resxファイルをApp_GlobalResourcesディレクトリにドロップしました。すべてが厄介でした)が、コンポーネントプロジェクト内でローカルにリソースにアクセスする方法に関する情報を見つけるのに苦労しています。

  • フォルダはApp_Local[/Global]Resources機能したくない-メインプロジェクトからできるように「ASP.NETフォルダを追加」することはできません。
  • 自分で生成して.resxファイルをドロップすると、サイトで行ったようにそれらにアクセスする方法がわかりません。

ThisWidget.csコンポーネントプロジェクトに完全に含まれるいくつかの省略された制御コード:

namespace site.shop {
  [ToolboxData("<{0}:ThisWidget runat=server></{0}:ThisWidget>")]
  public class ThisWidget : WebControl {
    protected override void CreateChildControls() {
      if (ChildControlsCreated) { return; }
      this.Controls.Clear();
      Label head = new Label();
      head.CssClass = "header";

      // fails: ThisWidget does not exist in namespace
      head.Text = System.Resources.ThisWidget.Label_head;
      // fails: can't find GetLocalResourceObject
      head.Text = new System.Web.UI.TemplateControl.GetLocalResourceObject("Label_head");
      // fails: can't find linked or embedded resources
      System.Resources.ResourceManager rm = new ResourceManager();
      head.Text = Convert.ToString(rm.GetObject("Label_head"));

      this.Controls.Add(head);
    }
  }
}

new、、System.Web.UI.TemplateControlなどの/なしのいくつかのバリエーション。

コンポーネントプロジェクトには(a)いくつかの関連するコントロールがあり、(b)ソートされているため、これをサテライトアセンブリとしてコンパイルしてから、元に戻す必要はありません(これは他のオプションのようです)。すでに衛星依存のですよね?私の望みは、.resxファイルをドロップしてコンパイルし.DLL、プロジェクトの残りの部分が機能するようにすることでした。

[編集] 答えに近づいているような気がしますが、まだそこにはいません...

何か案は?私は何が欠けていますか?

ありがとう!

4

1 に答える 1

0

ああ、私は近づいていました-私はポップを開いて、ThisWidget.Designer.cs呼び出す正しいパラメータを見つけましたResourceManager():

ResourceManager rm = new ResourceManager("Components.App_LocalResources.ThisWidget", typeof(ThisWidget).Assembly);
head.Text = Convert.ToString(rm.GetObject("Label_head"));

魔法のように機能するようです。App_LocalResourcesの特殊性を無視しているため、どこにでも配置できることに気付きました。そのため、/Resources/Resx/ディレクトリを.resx作成し、各コンポーネントのコントロールのファイルをそこに配置しました。呼び出しを更新するには、次のようにします。

ResourceManager rm = new ResourceManager("Components.Resources.Resx.ThisWidget", typeof(ThisWidget).Assembly);
于 2012-08-30T18:28:24.157 に答える