2013-02-16 8 views
5

TłoAdd Language (LTR/RTL) mechanizm do wiązki MVC 4

  • buduję system wielojęzyczny
  • używam MVC 4 zestawy wyposażone
  • mam różne Javascripts i Styles plików Języki od prawej do lewej (RTL) i od lewej do prawej (LTR)

Obecnie obsługuję ten scenariusz w następujący sposób:

BundleConfig File

//Styles for LTR 
bundles.Add(new StyleBundle("~/Content/bootstarp").Include(
       "~/Content/bootstrap.css", 
       "~/Content/CustomStyles.css")); 

// Styles for RTL 
bundles.Add(new StyleBundle("~/Content/bootstrapRTL").Include(
      "~/Content/bootstrap-rtl.css", 
      "~/Content/CustomStyles.css")); 

//Scripts for LTR 
bundles.Add(new ScriptBundle("~/scripts/bootstrap").Include(
      "~/Scripts/bootstrap.js", 
      "~/Scripts/CmsCommon.js" 
      )); 

//Scripts for RTL 
bundles.Add(new ScriptBundle("~/scripts/bootstrapRTL").Include(
      "~/Scripts/bootstrap-rtl.js", 
      "~/Scripts/CmsCommon.js" 
      )); 

Wdrożenie w widokach:

@if (this.Culture == "he-IL") 
{ 
    @Styles.Render("~/Content/bootstrapRTL") 
} 
else 
{ 
    @Styles.Render("~/Content/bootstrap") 
} 

Pytanie:

Zastanawiałem się, czy istnieje lepszy sposób jej wdrożenia , miałem nadzieję na:

Obetnij logikę wykrywania, która kultura i wyciągnij właściwy plik w pakietach (kod z tyłu), nie w widokach.

Więc w widokach wszystko, co będę musiał zrobić, to dzwonić do jednego pliku.

Jeśli zostawiam logikę w widokach oznacza to, że będę musiał sobie z nią poradzić w każdym widoku. Chcę tego uniknąć.

+0

btw to Bootstrap bit bootstARP;) – abatishchev

+0

Czy uważany za pomocnika HTML zamiast? – abatishchev

+0

Masz na myśli użycie pomocnika HTML, aby uzyskać nazwę pliku? – Silagy

Odpowiedz

3

Spróbuj zwyczaj HTML pomocnika:

public static class CultureHelper 
{ 
    public static IHtmlString RenderCulture(this HtmlHelper helper, string culture) 
    { 
     string path = GetPath(culture); 
     return Styles.Render(path); 
    } 

    private static string GetPath(string culture) 
    { 
     switch (culture) 
     { 
      case "he-IL": return "~/Content/bootstarpRTL"; 
      default: return "~/Content/bootstarp"; 
     } 
    } 
} 
+0

@Ivan: Dziękuję! – abatishchev

+0

Hi .. Nice code;), ale gdzie go umieścić? – oCcSking

+1

@oCcSking: Dzięki :) Zwykle w MyMvcApp \ Helpers \ CultureHelper.cs – abatishchev

5

Nie trzeba użyć przełącznika i magiczne ciągi. Można sprawdzić, czy kultura jest RTL z tej właściwości:

Thread.CurrentThread.CurrentCulture.TextInfo.IsRightToLeft