ASP.NET локализация многозначных сообщений - PullRequest
0 голосов
/ 14 октября 2010

Если у меня есть одна метка на моей странице ASP.NET (2.0), и я хочу сохранить в ней сообщение об ошибке;и если я сделаю это в коде, сделав несколько операторов IF, например:

if (...)
 value = "..."
else
 value = "......"
etc

как бы мне это локализовать, чтобы мне не нужно было писать:

if (...)
{
     switch(langCase)
     {
        case "en-US":
          value = "englishValue";
          break;
        case "de-CH":
          value = "german Swiss value";
          break;

             ...
     }
}
else
{ 
   switch(langCase)
     {
        case "en-US":
          value = "englishValueForElse";
          break;
        case "de-CH":
          value = "german Swiss value for ELSE";
          break;

             ...

     }
}

ЕслиЯ создаю несколько элементов управления метками для каждого случая if-else, мне придется скрыть все, кроме одного, для текущего языка (некрасиво?).То, что я хотел бы, это своего рода файл ресурсов, но со строками для каждого случая, который мог произойти, и столбцами для каждого необходимого языка.

Ответы [ 2 ]

3 голосов
/ 14 октября 2010

Вам следует использовать файл ресурсов (.resx) для хранения ваших сообщений.В ASP.NET встроены механизмы локализации с использованием ресурсов.

Чтобы добавить ресурсы в свое приложение, достаточно добавить новый «элемент ресурса» с помощью диалогового окна «Добавить новый элемент».

Если ваш файл resx называется ApplicationStrings.resx, содержащаяся в нем строка ErrorLabel будет доступна на вашем веб-сайте через свойство

ApplicationStrings.ErrorLabel

(VS создает класс для инкапсуляции файла resx)

Вы можете поддерживать локализацию со строками, создавая новые ресурсы с подходящими именами:

ApplicationStrings.fr.resx будет содержать французскую локализацию ApplicationStrings.resx ApplicationStrings.fr-fr.resx будет содержать французскую / французскую локализациюи т. д.

Откат обработки ASP.NET, затем, если ErrorLabel отсутствует в ApplicationStrings.fr-fr.resx (или ApplicationStrings.fr-fr.resx не существует), он будет искать его вApplicationStrings.fr.resx, затем в ApplicationStrings.resx.

Стоит также отметить, что ASP.NET используют текущую культуру потоков для выполнения локализации в ресурсах.Поэтому вы должны убедиться, что System.Threading.Thread.CurrentThread.Culture содержит вашу клиентскую культуру, а не вашу серверную.

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

См. Следующую статью MSDN для получения подробного руководства о том, как правильно выполнять глобализацию в ASP.NET:

...