Использование символа @ при локализации приложений
Как известно, существует три способа использования символа @
- Использования зарезервированных слов в качестве идентификаторов, например,
string @class = "integer"; - Для определения строк, текст которых будет трактоваться явно, т.е. без escape-символов скажем, для объявления пути к папке string path = @"C:\Temp";
- Для объявления многострочного текста.
sting message =
@"Read the language specification,
you must, young padavan.";
Сухой, но чёткий язык спецификации сообщает:
“The prefix “@” enables the use of keywords as identifiers, which is useful when interfacing with other programming languages. The character @ is not actually part of the identifier, so the identifier might be seen in other languages as a normal identifier, without the prefix. An identifier with an @ prefix is called a verbatim identifier. Use of the @ prefix for identifiers that are not keywords is permitted, but strongly discouraged as a matter of style.”
Четвёртый способ
Перед выпуском приложений, которые должны быть локализованы на несколько языков, постоянно возникает проблема нахождения в тексте продукта всех строк, текст которых остался не локализован. Например, в процессе разработки сообщения об ошибках зачастую пишутся явно. Конечно, можно всегда использовать локализованные константы. Но во-первых, нет никакой уверенности, что данный код доживёт до релиза в его первоначальном виде, и что данное сообщение будет использовано в финальной версии. Кроме того, при таком подходе файлы ресурсов приложения замусориваются неиспользуемыми строками когда в процессе разработки из кода удаляются все выражения, использующие ресурсную константу. Это ведет к дополнительным расходам на перевод данных строк на разные языки на этапе локализации приложения.
Поэтому зачастую, скажем, сообщения об ошибках, пишутся либо на английском либо на руском языках, а на этапе локализации методом «пристального всматривания в код» ищутся все нелокализованные строки текста и заменяются на ресурсные константы. По окончании локализации всегда возникает вопрос:
— Все ли строки приложения локализованы?
Наличие в приложении англоязычных соощений об ошибках приводит вынуждает пользователей, английского языка не знающих, сообщать о проблеме в стиле «программа не работает, что-то пишет непонятное». Очень информативно, не так ли? Сидите, разбирайтесь, деньги-то за продукт вы взяли.
Для решения задачи поиска таких строк мной в компании было предложено использовать символ @ во всех строках, которые предполагается впоследствии локализовать. Способ не хитрый, может ещё кто-нибудь додумался.
throw new ErrorException(@"Sawing regime with specified parameters already exists.");
Простой поиск по исходным текстам символа @ выдаст список нелокализованных строк. При этом текст, который в процессе разработки умирает естественной смертью, не «повиснет» в ресурсах приложения.