2010-10-08 13 views
16

Mam klienta, który chce określić własną wersję zlokalizowanej treści dla podzestawu zasobów ciągów.Jaki jest zalecany sposób tworzenia niestandardowej kultury i powiązanych plików zasobów dla określonego klienta?

Dla prostoty jest tu prosty przykład:
Powiedzmy mam 2 zlokalizowane ciągi (pokazujące angielskiej treści)
PageTitle = "Hello World"
PageDescription = "To jest bardziej rozwlekły wersja Hello World!"

Chcę je zlokalizować, więc mam pliki zasobów.

  • Strings.resx (zawiera mój angielski string)
  • Strings.fr-ca.resx (zawiera moje francusko-kanadyjskie ciągi)
  • Strings.fr-ca-clientX .resx (zawiera moje struny dla klienta kogo francusko-kanadyjski i therfore bardzo wybredna;) - tak żartuje)

Idealnie "Strings.fr-ca-clientX" może określać tylko te łańcuchy, które mają "przesłonić". Innymi słowy, mogą po prostu chcieć zmienić stronę PageTitle i kontynuować używanie PageDescription z pliku zasobów "fr-ca".

Więc jak mam to rozwiązać w .NET? Idealnie byłoby po prostu utworzyć pliku resx i określ kultury w moim „Web.config” i powinno działać ...

<globalization uiCulture="fr-ca-clientX" culture="fr-ca-clientX" /> 

Jednak to nie działa. "Znacznik zawiera niepoprawną wartość atrybutu" kultura "" jest moim pierwszym ograniczeniem.

Dzięki,
Justin

+1

I wouldn polecam ten sposób zapewnienia lokalizacji. Nie jest to łatwe, ale w przypadku takich żądań prawdopodobnie utworzyłabym elewację zasobów, która będzie decydować o tym, jakie łańcuchy ładować w czasie wykonywania. –

Odpowiedz

1

Prawdopodobnie trzeba stworzyć swoją własną kulturę i zarejestrować go. Znajdziesz artykuł MSDN na ten temat here.

Nie trzeba zmieniać atrybutu culture, powinien on pozostać w "fr-CA", ponieważ atrybut uiCulture jest odpowiedzialny za ładowanie ciągów z zasobów.

2
public void AddCustomCulture(string cultureName, string baseCulture) 
    { 
     var cultureBuilder = new CultureAndRegionInfoBuilder(cultureName, CultureAndRegionModifiers.None); 

     cultureBuilder.LoadDataFromCultureInfo(new CultureInfo(baseCulture)); 

     var region = baseCulture.Substring(3, 2); 

     cultureBuilder.LoadDataFromRegionInfo(new RegionInfo(region)); 

     cultureBuilder.Register(); 
    } 
2

Można tworzyć nową kulturę z następującego kodu:

 //Get culture info based on Great Britain 
     CultureInfo cultureInfo = new CultureInfo("en-GB"); 
     RegionInfo regionInfo = new RegionInfo(cultureInfo.Name); 

     CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder(txtCultureName.Text, CultureAndRegionModifiers.None); 

     cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(cultureInfo); 
     cultureAndRegionInfoBuilder.LoadDataFromRegionInfo(regionInfo); 

     // Custom Changes 
     cultureAndRegionInfoBuilder.CultureEnglishName = txtCultureName.Text; 
     cultureAndRegionInfoBuilder.CultureNativeName = txtNativeName.Text; 

     cultureAndRegionInfoBuilder.Register(); 

Napisałem post na tworzenie aplikacji, nie tylko, że ..

http://wraithnath.blogspot.com/search/label/Globalization

Powiązane problemy