Файлы ресурсов с несколькими языками - PullRequest
1 голос
/ 26 ноября 2010

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

Я пытался добавить несколько файлов ресурсов следующим образом:

  • MyResourceName.resx
  • MyResourceName.sv.resx

Они содержат одну строковую таблицу с одним текстом.

Я использовал Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(1053); для переключения языка. Но я все еще получил язык по умолчанию при использовании var string = MyResourceName.MyText.

Я тоже пытался изменить CurrentUICulture.

Как добавить поддержку нескольких языков?

Обновление

Не знаю, имеет ли это значение. Но я пытаюсь изнутри моего проекта модульного теста (mstest). Файлы ресурсов также являются частью тестового проекта.

Ответы [ 3 ]

0 голосов
/ 26 ноября 2010

Если у вас есть ResourceManager как этот

var manager = new ResourceManager("you.resource.strings.file", Assembly.GetExecutingAssembly());

, вы всегда можете получить из него строку на нужном языке, вызвав перегруженный метод GetString, который принимает объект CultureInfo какпараметр.Таким образом, вам не нужно устанавливать Культуру в вашей теме.

var string = manager.GetString("myText", CultureInfo.GetCulture(1053));
0 голосов
/ 26 ноября 2010

Если для .RESX задано действие сборки «Встроенный ресурс» в Visual Studio (с настраиваемым инструментом «ResXFileCodeGenerator»), необходимо развернуть файл .resources.dll, скомпилированный для шведского языка.Он должен находиться в папке bin \ sv.

Для веб-приложений ASP.NET, если вы определите файлы .RESX в папке с именем App_GlobalResources, то у вас не будет папки bin \ sv (в данном случаеДействие сборки будет «Контентом» с пользовательским инструментом, установленным в «GlobalResourceProxyGenerator»), так что, как вы говорите, вам не нужно развертывать дополнительную DLL.

В обоих случаях код в порядке (с CurrentUICulture , а не CurrentCulture) и должен работать.

0 голосов
/ 26 ноября 2010

Во-первых, это CurrentUICulture, который контролирует это (я заметил, что вы тоже это пытались; просто хотел уточнить это).

Второе: приложение многопоточное?Может ли быть так, что вы установили CurrentUICulture в одном потоке, но прочитали MyResourceName.Text в другом (что не соответствует той же культуре)?

...