Локализованное решение scriptbundle

Привет. В настоящее время я использую asp.net MVC 4 rc с System.Web.Optimization. Поскольку мой сайт должен быть локализован в соответствии с предпочтениями пользователя, я работаю с плагином 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 })
                    ));

Например, если культура пользовательского интерфейса "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;
    }

}

Спасибо

Константинос

11
задан Hao Kung 27 August 2012 в 06:27
поделиться