Каков рекомендуемый способ создания пользовательской культуры и связанных файлов ресурсов для конкретного клиента? - PullRequest
16 голосов
/ 09 октября 2010

У меня есть клиент, который хочет указать свою собственную версию локализованного контента для подмножества моих строковых ресурсов.

Для простоты приведем базовый пример:
Допустим, у меня есть 2 локализованные строки (показаны на английском языке).content)
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" />

Однако это не работает.«Тег содержит недопустимое значение для атрибута« culture »» - это моя первая проблема.

Спасибо,
Джастин

Ответы [ 3 ]

2 голосов
/ 17 июня 2011
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 голосов
/ 15 ноября 2011

Вы можете создать новую культуру с помощью следующего кода:

        //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();

Я написал пост о создании приложения для этого.

1 голос
/ 09 октября 2010

Вам, вероятно, нужно создать свою собственную культуру и зарегистрировать ее.Вы найдете статью MSDN на эту тему здесь .

Вам не нужно изменять атрибут культуры, он должен оставаться на "fr-CA", так как за загрузку отвечает атрибут uiCultureстроки из ресурсов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...