.NET локализация - PullRequest
       2

.NET локализация

3 голосов
/ 02 сентября 2011

Я разрабатываю приложение, которое поддерживает несколько локалей.

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

Это прекрасно работает в приложении WPF, каждый раз, когда в приложении требуется строка, в dll делается запрос, и он возвращает текст в соответствии с языком, выбранным в приложении.Если язык изменяется, текст, возвращаемый с языка dll, отражает изменение.

Теперь я создаю веб-сайт в ASP.Net с MVC, который использует тот же язык dll.

Проблема в том, что менеджер ресурсов на языке dll, насколько я понимаю, всегда возвращает текст для системной культуры. Я изменил cultureinfo, используемую менеджером ресурсов, но он не работает.

У кого-нибудь есть идеи, как мне это решить?Спасибо

ОБНОВЛЕНИЕ: Извините за поздний ответ.Нет доступа к Интернету в выходные дни ... Это первый раз, когда у меня есть проект, который использует одну и ту же DLL для веб-страниц и окон, и я ожидал, что поведение будет одинаковым, но это не так.По сути, у меня есть глобальный класс, в котором хранятся настройки пользователя и приложения, одним из которых является текущая cultureinfo, когда пользователь изменяет его, обновление менеджера языков является текущей переменной cultureinfo.Когда я вызываю код для получения строки языка,

resmgr.GetString (label, ci);

Где resmgr - это объект ResourceManager менеджера языков,ci - это объект cultureinfo, помечающий строку, которую я хочу получить, он возвращает текст метки / языка.У меня есть файл resx для каждой культуры, поддерживаемой проектом, и один для инварианта / значения по умолчанию. В приложении Windows работает нормально, но в Интернете и в некоторых модульных тестах, которые я сделал, этого нет, даже если я изменяю значение ci.Для новой культуры результат всегда совпадает с последовательностью из инвариантной культуры.Я попытался изменить текущую культуру потоков и текущую культуру пользовательского интерфейса, но это не сработало

ОБНОВЛЕНИЕ 2: Почему метод менеджера ресурсов GetResourceSet возвращает правильный набор ресурсов для культуры, передаваемой в приложении wpf, но такой жекод в модульном тестировании или в сети возвращает инвариантный набор ресурсов.Я что-то упускаю, просто не знаю, что это такое ....

ОБНОВЛЕНИЕ 3: Из-за использования IOC и потому, что языковая часть не является ссылкой, а копируется в папку, когда она завершает компиляцию,я обнаружил, что папки, созданные для каждого ресурса, не копируются в папку отладки модульного теста и в папку bin веб-сайта.Я исправил это, и теперь файл копируется, но проблема сохраняется.

Ответы [ 3 ]

4 голосов
/ 02 сентября 2011

См. учебник из нескольких частей , так как это довольно обширный предмет.

0 голосов
/ 05 сентября 2011

Как мне грустно на update3 тот факт, что я не копировал dll ресурсов для каждого языка, сделал то, что веб-сайт и модульный тест потерпели неудачу, когда я попытался получить метку, так как менеджер ресурсов не нашел правильный язык, это будет всегда возвращать инвариантную строку, связанную с меткой. Сначала, похоже, копия dll не работала, но после того, как я запустил «Чистое решение» и «Перестроить решение» из visual studio, веб-сайт и модульное тестирование начали работать, как и ожидалось. Спасибо за все подсказки, они мне очень помогли, и тогда я смог определить проблему.

0 голосов
/ 05 сентября 2011

Возможно, вам придется настроить web.config :

<configuration>

  <system.web>
    ...
    <globalization uiCulture="auto" culture="auto" />
    <!--
    <globalization uiCulture="auto" culture="auto" />
    <globalization uiCulture="en" culture="en-US" />
    <globalization uiCulture="de" culture="de-CH" />
    -->
    ...
  </system.web>

</configuration>
...