Должны ли мы хранить строки формата в ресурсах? - PullRequest
22 голосов
/ 08 июня 2009

Для проекта, в котором я сейчас работаю, я должен доставить специально отформатированные строки стороннему сервису для обработки. И вот я строю строки так:

string someString = string.Format("{0}{1}{2}: Some message. Some percentage: {3}%", token1, token2, token3, number); 

Вместо того, чтобы жестко закодировать строку, я подумывал перенести ее в ресурсы проекта:

string someString = string.Format(Properties.Resources.SomeString, token1, token2, token3, number); 

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

Как мне обойти это? Является ли строка в жестко заданном формате необходимым злом в этом случае?

Ответы [ 5 ]

18 голосов
/ 08 июня 2009

Я думаю, что это необходимое зло, которое я часто использовал. Что-то вонючее, что я делаю, это:

// "{0}{1}{2}: Some message. Some percentage: {3}%"
string someString = string.Format(Properties.Resources.SomeString
                                  ,token1, token2, token3, number);

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

16 голосов
/ 08 июня 2009

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

Если вы используете строки ресурсов, следует помнить о нескольких моментах.

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

  2. Избегайте использования строк в токенах вашего формата на вашем языке. Лучше использовать это для чисел. Например, сообщение:

    «Указанное вами значение должно быть между {0} и {1}»

    замечательно, если {0} и {1} являются числами, такими как 5 и 10. Если вы форматируете строки типа «пять» и «десять», это затруднит локализацию.

  3. Вы можете обойти проблему читабельности, о которой говорите, просто хорошо назвав свои ресурсы.

    string someString = string.Format (Properties.Resources.IntegerRangeError, minValue, maxValue);

  4. Оцените, генерируете ли вы видимые пользователем строки на правильном уровне абстракции в вашем коде. В общем, я стараюсь группировать все видимые пользователю строки в коде, максимально близком к пользовательскому интерфейсу. Если какой-либо низкоуровневый код ввода-вывода файла должен обеспечивать ошибки, он должен делать это с исключениями, которые вы обрабатываете в своем приложении, и с согласованными сообщениями об ошибках. Это также объединит все ваши строки, требующие локализации, вместо того, чтобы перетекать их по всему коду.

3 голосов
/ 08 июня 2009

Одна вещь, которую вы можете сделать, чтобы помочь добавить жестко закодированные строки или даже ускорить добавление строк в файл ресурсов, - это использовать CodeRush Xpress, который вы можете бесплатно скачать здесь: http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/

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

Resharper имеет аналогичные функции .

2 голосов
/ 21 сентября 2016

да, вы можете enter image description here

новый, давайте посмотрим, как

String.Format(Resource_en.PhoneNumberForEmployeeAlreadyExist,letterForm.EmployeeName[i])

это будет давать мне динамическое сообщение каждый раз

кстати, я использую ResXManager

2 голосов
/ 08 июня 2009

Не понимаю, почему включение строки формата в программу - это плохо. В отличие от традиционных недокументированных магических чисел, на первый взгляд совершенно очевидно, что они делают. Конечно, если вы используете строку форматирования в нескольких местах, она обязательно должна храниться в соответствующей переменной только для чтения, чтобы избежать избыточности.

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

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