Рекомендация. Как лучше всего хранить исключения / ошибки или информационные сообщения в C # .net для интернационализации? - PullRequest
4 голосов
/ 31 марта 2009

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

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

Мой вопрос: каков наилучший путь для достижения цели без учета стоимости, которая идет с каждым вариантом? Если у вас есть практика, которая лучше, чем то, что было в списке, я хотел бы услышать это.

Технологии: ОС: семейство Windows Платформа: .NET Frame 2 и выше Язык: C # База данных: MS SQL 2005 и выше

Спасибо, ребята!

Cullen

Ответы [ 2 ]

4 голосов
/ 31 марта 2009

Использование ресурсов:

Как это увеличивает сложность логики программы?

try
{
   //do something with System.Net.Mail with invalid email..
}
catch (FormatException fex)
{
    throw new Exception(Resources.ErrorMsg.Invalid_Email, fex);
}

Редактировать

В VS2008 при создании ресурса вы можете определить, является ли он внутренним или общедоступным. Итак, предположим, что мы установили его в public, в сборке под названием ClassLibrary1 мы можем получить доступ к свойству вроде:

ClassLibrary1.Properties.Resources.InvalidError

Где InvalidError - это имя ошибки. Опять же, я не думаю, что это добавляет логику к логике.

2 голосов
/ 16 января 2010

.NET уже поддерживает несколько ресурсов для нескольких культур, используя соглашение об именах:

 <default resource file name>.<culture>.resx

По сути, как отметил Джош, VS2008 создает красивую безопасную оболочку для доступа к этим ресурсам.

Тем не менее, пользовательский интерфейс VS предоставляет медвежий минимум того, что вы можете сделать.

Если вы создаете новый файл ресурсов, который называется точно так же, как и файл по умолчанию, добавьте информацию о культуре перед resx. (ПРИМЕЧАНИЕ. Вам нужно будет создать его где-то еще, а затем скопировать в папку волшебных свойств.)

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

Например:

    // Using the default culture
    string s = Resources.Error1Msg;

    Thread.CurrentThread.CurrentUICulture = new CultureInfo("es-CO");

    // Using the specific culture specified as above:
    s = Resources.Error1Msg;

Если вам нужно параметризовать ваше сообщение, используйте string.Format для параметризации вывода.

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

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

НТН

Philip

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