こんにちは私は現在、System.Web.Optimizationでasp.net MVC4rcを使用しています。私のサイトはユーザーの好みに応じてローカライズする必要があるため、jquery.globalizeプラグインを使用しています。
ScriptBundleクラスをサブクラス化し、に応じてバンドルするファイルを決定したいと思いますSystem.Threading.Thread.CurrentThread.CurrentUICulture
。これは次のようになります。
bundles.Add(new LocalizedScriptBundle("~/bundles/jqueryglobal")
.Include("~/Scripts/jquery.globalize/globalize.js")
.Include("~/Scripts/jquery.globalize/cultures/globalize.culture.{0}.js",
() => new object[] { Thread.CurrentThread.CurrentUICulture })
));
たとえば、UIカルチャが「en-GB」の場合、次のファイルを取得します(もちろん、縮小し、可能であれば、スクリプトファイルまたはcurrentuiカルチャが変更されるまでキャッシュします)。
- "〜/ Scripts / jquery.globalize / globalize.js"
- "〜/ Scripts / jquery.globalize / globalize-en-GB.js" <-このファイルがサーバーファイルシステムに存在しない場合は、globalize-en.jsにフォールバックします。
Includeメソッドを次のようなものでオーバーロードしようとしましたが、リクエストではなくアプリケーションの起動時に評価されるため、これは機能しません。
public class LocalizedScriptBundle : ScriptBundle
{
public LocalizedScriptBundle(string virtualPath)
: base(virtualPath) {
}
public Bundle Include(string virtualPathMask, Func<object[]> getargs) {
string virtualPath = string.Format(virtualPathMask, getargs());
this.Include(virtualPath);
return this;
}
}
ありがとう
コンスタンチノス