Каков рекомендуемый способ создания настраиваемой культуры и связанных файлов ресурсов для конкретного клиента?
У меня есть клиент, который хочет указать собственную версию локализованного содержимого для подмножества моих строк.
Для простоты здесь приведен базовый пример:
Допустим, у меня есть 2 локализованные строки (показывающие английский контент)
Pagetitle= "Hello World"
PageDescription = "Это более многословная версия Hello World!"
Я хочу их локализовать, поэтому у меня есть файлы ресурсов.
- Strings.resx(содержит мой английский
строка)
- Strings.fr-ca.resx(содержит мои французско-канадские строки)
- Strings.fr-ca-clientX.resx(содержит
мои строки для Клиента, который
Французско-канадский и очень
придирчивый;) - просто шутит)
В идеале "Strings.fr-ca-clientX" может указывать только строки, которые они хотят "переопределить". Другими словами, они могут просто захотеть изменить PageTitle и продолжить использование PageDescription из файла ресурсов "fr-ca".
Итак, как мне это сделать в .NET? В идеале я бы просто создал файл resx и задал культуру в своем "Web.config", и он должен работать...
<globalization uiCulture="fr-ca-clientX" culture="fr-ca-clientX" />
Однако это не работает. "Тег содержит недопустимое значение для атрибута" культура ". Это мой первый объект.
Спасибо,
Джастин
Ответы
Ответ 1
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
Вы можете создать новую культуру со следующим кодом:
//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();
Я написал сообщение о создании приложения, чтобы сделать именно это.
http://wraithnath.blogspot.com/search/label/Globalization
Ответ 3
Вам, вероятно, нужно создать свою собственную культуру и зарегистрировать ее. Вы найдете статью MSDN в этом разделе здесь.
Вам не нужно изменять атрибут культуры, он должен оставаться в "fr-CA", так как атрибут uiCulture отвечает за загрузку строк из ресурсов.