-
Notifications
You must be signed in to change notification settings - Fork 55
Description
Название проверки
Строка не локализована. Возможно, она видна пользователю.
Английское название проверки
??
Правило анализа кода/метаданных
Интерфейсные тексты в коде: требования по локализации
Область применения: управляемое приложение, мобильное приложение,
обычное приложение.
1. Если в модулях конфигурации встречаются строки, предназначенные для
пользовательского интерфейса (сообщения пользователю, надписи в формах,
названия и подсказки команд, выражения в настройках СКД и т.п.)
необходимо обеспечить возможность локализации таких строк.
Для этого необходимо применять функцию НСтр вместо прямого использования
строковых литералов. Иное использование строк, предназначенных для
пользовательского интерфейса, не допускается.
Например, неправильно:
Предупреждение("Для выполнения операции необходимо установить расширение работы с файлами.");
Правильно:
Предупреждение(НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'"));
Также следует обращать внимание на корректное использование функции
НСтр.
Например, неправильно:
ТекстСообщения = "ru='Для выполнения операции необходимо установить расширение работы с файлами.'";
Предупреждение(НСтр(ТекстСообщения));
правильно:
ТекстСообщения = НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'");
Предупреждение(ТекстСообщения);
2. В том случае если строка является составной и включает в себя части,
зависящие от тех или иных условий, тем не менее, настоятельно
рекомендуется использовать логически завершенные, целостные фразы. Для
формирования переменной составляющей строки при этом необходимо
применять функцию
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку для подстановки
параметров в строки сообщений пользователю.
Неправильно:
СообщениеОНехватке = "Не хватает товара " + НаименованиеТовара + " на складе " + НаименованиеСклада + ".";
Правильно:
СтрокаВопроса = НСтр("ru = 'Видите ли вы корректно это сообщение: ""%1""?'");
СтрокаВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
СтрокаВопроса, ПолучитьТекстСообщения());
Это требование обусловлено, во-первых, разным расположением параметров в
тексте предложения на различных языках, что приводит к необходимости
изменения исходного кода для перестановки складываемых фрагментов строк,
а во-вторых, сложностью перевода отдельных несогласованных частей
предложения.
В связи со сложившейся практикой, допускается использовать именованные
параметры подстановки (параметры, включающие имя аналогично переменной,
а не номер) только в двух вариантах: [Параметр], %Параметр%. Здесь
Параметр должен удовлетворять требованиям стандарта Правила образования
имен переменных.
Правильно:
СообщениеОНехватке = НСтр("ru='Не хватает товара %Товар% на складе %Склад%.'")
СообщениеОНехватке = СтрЗаменить(СообщениеОНехватке, "%Товар%", НаименованиеТовара);
СообщениеОНехватке = СтрЗаменить(СообщениеОНехватке, "%Склад%", НаименованиеСклада);
При использовании в конфигурации Библиотеки стандартных подсистем, можно
использовать функцию
СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку. Это позволит
лучше автоматизировать определение, что в строке используется именно
подстановка параметров, а не другая синтаксическая конструкция языка.
Правильно:
Шаблон = НСтр("ru = '[Организация]-[Контрагент] Счет №[Номер] от [Дата]'");
ЗначенияРеквизитовДокументов = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивОбъектов, "Организация,Контрагент,Номер,Дата,Ссылка");
Для Каждого Ссылка Из МассивОбъектов Цикл
ИмяФайла = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(Шаблон, ЗначенияРеквизитовДокументов[Ссылка]);
КонецЦикла;
3. В функции НСтр строка ограничивается символами одинарных кавычек.
Такое требование обусловлено частым использованием двойных кавычек в
строковых литералах, а также встроенным в платформу механизмом
редактирования строк на разных языках.
Неправильно:
Предупреждение(НСтр("ru=Переменная типа ""Строка"""));
Предупреждение(НСтр("ru=""Переменная типа ""Строка"""""));
Правильно:
Предупреждение(НСтр("ru='Переменная типа ""Строка""'"));
4. В редких случаях, например, когда нужно собрать длинное сообщение с
предоставлением лога действий пользователя, допускается применять не
замену строк в строке-шаблоне, а сложение строк. При этом неязыковые
символы (чаще перенос строки) в начале и конце строк необходимо выделять
в отдельные строковые литералы (которые пропускаются при переводе).
Неправильно:
ТекстСообщения = НСтр("ru = 'Не удалось сохранить файл документа по причине:
|'")
+ ИнформацияОбОшибке;
Правильно:
ТекстСообщения = НСтр("ru = 'Не удалось сохранить файл документа по причине:'")
+ Симв.ПС + ИнформацияОбОшибке;
В противном случае, при переводе строки на другой язык концевой пробел
легко может быть не замечен переводчиком, так как переводчик не видит
всего контекста, а только сводную таблицу строк, подлежащих переводу.
Кроме того, может быть искажена при переводе фраза, так как её
продолжение переводчику не видно и нет символа шаблона подстановки,
поясняющего, что дальше будет продолжение.
1. Если в модулях конфигурации встречаются строки, предназначенные для
пользовательского интерфейса (сообщения пользователю, надписи в формах,
названия и подсказки команд, выражения в настройках СКД и т.п.)
необходимо обеспечить возможность локализации таких строк.
Для этого необходимо применять функцию НСтр вместо прямого использования
строковых литералов. Иное использование строк, предназначенных для
пользовательского интерфейса, не допускается.
Мета-информация (пожалуйста, заполните если знаете):
- Номер стандарта:
761
- Код проверки:
??my-check-id
- Тип ошибки:
ERROR
SECURITY
PERFORMANCE
WARNING
PORTABILITY
LIBRARY_DEVELOPMENT_AND_USAGE
CODE_STYLE
UI_STYLE
SPELLING
- Критичность:
BLOCKER
CRITICAL
MAJOR
MINOR
TRIVIAL
- Код ошибки АПК:
1297
Параметры проверки
- NA
Текст ошибки
Строка не локализована. Возможно, она видна пользователю.
Пример некорректного решения
- NA
Описание, почему так делать нельзя
Пример корректного решения
- NA