1

私が取り組んでいるプロジェクトは、多くのロケールをサポートしています。このソリューションは、キャッスル モノレール メカニズムの使用に基づいています。適切なコントローラー クラスは次のようにマークされます。

[Resource("pageResx", "...Controllers.Static")]

ここで、StaticTemplate はコントローラー名のプレフィックスであり、リソース ファイルは '..\Resources\Controllers\StaticTemplate*' に配置されます。

一方、StatiController は、次のようにマークされている BaseController クラスから継承します。

[LocalizationFilter(RequestStore.Session, "ロケール")]

そのため、ユーザーのロケールはセッションに保存されます。で、これです。最後のステップは NVelocity vm-file で、適切なリソースが次のように取得されます。

$pageResx.Buttons_Download

このようにして、locale='de' を持つユーザーの ID = 'Buttons_Download' を持つリソース文字列が、ファイル '..\Resources\Controllers\Static.de.resx' から取得されます。

ただし、ローカリゼーションが行われるプロジェクトには別の場所があります - 電子メールの作成です。そこには次のロジックが実装されています。

public class EmailPersonalizer : IEmailPersonalizer
{
    ...
    printJobResourceManager = new ResourceManager("...Resources.PrintJob", 
                                        typeof (EmailPersonalizer).Assembly);
    public string ToLocalizedString(string resourceId, VendorUser user, 
          params object[] args)
    {
        ...
        var resourceString = printJobResourceManager.GetString(resourceId, 
                                    culture);
        ...
    }
    ...
}

パラメータの値を指定すると、resourceString が正しく評価されます。しかし...

ここで魔法が来ます。ブラジルロケール用のリソースファイルがあります。接尾辞「pt-BR」が付いています。ポルトガル語のロケールもありますが、適切なリソース ファイルがありません - 'pt' ファイルがありません。ビュー ページに関しては、モノレールは pt-user の pt-BR ファイルからローカライズされたリソースを取得します。しかし、電子メールの構築を実装するロジックは、同じことを行うことができません。代わりに、「en」が使用されていた基本リソースからローカライズされた文字列を取得します。

リソースをマッピングするための .NET メカニズムについて読みました ( http://msdn.microsoft.com/en-us/library/sb6a8618.aspx )。しかし、モノレールの説明は見つかりませんでした。

問題は、モノレール (または誰でも) が「pt」を「pt-BR」にどのようにマッピングするかです。そして、同じロジックを外部に実装するにはどうすればよいでしょうか?

前もって感謝します

4

1 に答える 1

0

これは訪問者の Web コンテキストの外で実行されると思いますか? .NET がリソースから適切な文字列を取得できるようにするには、現在のスレッドのカルチャを変更する必要があります。

var culture = CultureInfo.CreateSpecificCulture( "pt" );
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

電話で文化を伝えているようですね。

 var resourceString = printJobResourceManager.GetString(resourceId, 
                                culture);

適切な文化を送信した場合でも、この呼び出しは wearg の結果を返すと言っていますか?

于 2013-02-06T09:43:08.263 に答える