--------------------------------------------------------------------------------
Если в модулях конфигурации встречаются строки, предназначенные для пользовательского интерфейса (сообщения пользователю, надписи в формах, названия и подсказки команд и т.п.) необходимо обеспечить возможность локализации таких строк.
Для этого необходимо применять функцию НСтр() вместо прямого использования строковых литералов. Иное использование строк, предназначенных для пользовательского интерфейса, не допускается.
В том случае если строка является составной и включает в себя части, зависящие от тех или иных условий, тем не менее, настоятельно рекомендуется использовать логически завершенные, целостные фразы. Для формирования переменной составляющей строки при этом необходимо применять замену подстрок по определенным правилам. При этом можно использовать как функцию СтрЗаменить, так и предусмотреть в конфигурации специально предназначенную для этого функцию.
Неправильно:
СообщениеОНехватке = "Не хватает товара " + НаименованиеТовара + " на складе " + НаименованиеСклада + "!";
Правильно:
СообщениеОНехватке = НСтр("ru='Не хватает товара %Товар% на складе %Склад%!'")
СтрЗаменить(СообщениеОНехватке, "%Товар%", НаименованиеТовара);
СтрЗаменить(СообщениеОНехватке, "%Склад%", НаименованиеСклада);
В функции НСтр() строка ограничивается символами одинарных кавычек.
Такое требование обусловлено частым использованием двойных кавычек в строковых литералах.
Правильно:
Сообщить(НСтр("ru='Переменная типа ""Строка""'"));
Неправильно:
Сообщить(НСтр("ru=Переменная типа ""Строка"""));
Сообщить(НСтр("ru=""Переменная типа ""Строка"""""));
В том случае, если все же применяется не замена строк в строке-шаблоне, а сложение строк, то неязыковые символы (пробелы, табуляция и пр.) в начале и конце строк необходимо выделять в отдельные строковые литералы.
Правильно:
ТекстСообщения = НСтр("ru = 'Остаток выданных подотчетому лицу денежных средств:'") + " " + ВыборкаИзРезультатаЗапроса.ОстатокУПодотчетногоЛица;
Неправильно:
ТекстСообщения = НСтр("ru = 'Остаток выданных подотчетому лицу денежных средств: '") + ВыборкаИзРезультатаЗапроса.ОстатокУПодотчетногоЛица;
В редких случаях строковые литералы из текстов запросов так же могут оказаться частью пользовательского интерфейса. В таких случаях строковые литералы необходимо выносить из текста запроса в параметры.
Правильно:
ЗапросПоВерсиям = Новый Запрос("
|ВЫБРАТЬ
|Версии.Ссылка,
|ВЫБОР КОГДА Версии.Выпущена = ИСТИНА
| ТОГДА &ТекстВыпущеннойВерсии
| ИНАЧЕ &ТекстНеВыпущеннойВерсии
|КОНЕЦ КАК ТекстПояснения
| ИЗ
| Справочник.Версии КАК Версии");
ЗапросПоВерсиям.УстановитьПараметр("&ТекстВыпущеннойВерсии", НСтр("ru='(выпущена)'"));
ЗапросПоВерсиям.УстановитьПараметр("&ТекстНеВыпущеннойВерсии", НСтр("ru='(в разработке)'"));
Неправильно:
ЗапросПоВерсиям = Новый Запрос("
|ВЫБРАТЬ
|Версии.Ссылка,
|ВЫБОР КОГДА Версии.Выпущена = ИСТИНА
| ТОГДА ""(выпущена)""
| ИНАЧЕ ""(в разработке)""
|КОНЕЦ КАК ТекстПояснения
| ИЗ
| Справочник.Версии КАК Версии");