Меню


Курсы СтимулСправочникПолезные материалы1С:Предприятие 8.2РазработчикамСоздание и изменение объект…

1С:Предприятие 8.2 /
Разработчикам /
Создание и изменение объектов метаданных

Оглавление

Требования по локализации конфигурации

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

Для этого необходимо применять функцию НСтр вместо прямого использования строковых литералов. Иное использование строк, предназначенных для пользовательского интерфейса, не допускается.

Например, неправильно:

Предупреждение("Для выполнения операции необходимо  установить  расширение работы с файлами.");

Правильно:

Предупреждение(НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'"));

Также следует обращать внимание на корректное использование функции НСтр.
Например, неправильно:

ТекстСообщения = "ru='Для выполнения операции необходимо установить расширение работы с файлами.'";
Предупреждение(НСтр(ТекстСообщения));

правильно:

ТекстСообщения = НСтр("ru='Для выполнения операции необходимо установить расширение работы с файлами.'");
Предупреждение(ТекстСообщения);

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

Неправильно:

СообщениеОНехватке = "Не хватает товара " + НаименованиеТовара + " на складе " + НаименованиеСклада + ".";

Правильно:

СообщениеОНехватке = НСтр("ru='Не хватает товара %Товар% на складе %Склад%.'") 
СообщениеОНехватке = СтрЗаменить(СообщениеОНехватке, "%Товар%", НаименованиеТовара); 
СообщениеОНехватке = СтрЗаменить(СообщениеОНехватке, "%Склад%", НаименованиеСклада);

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

Примечание. В редких случаях, когда подставляемые значения совпадают или содержат подстановочные строки (%Склад% и т.п.), описанный способ с применением СтрЗаменить может работать некорректно. При использовании в конфигурацииБиблиотеки стандартных подсистем в распоряжении разработчика имеется специализированная функция СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку, в которой подобного ограничения нет:

СообщениеОНехватке = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='Не хватает товара %1 на складе %2.'"), НаименованиеТовара, НаименованиеСклада);

3. В функции НСтр строка ограничивается символами одинарных кавычек. Такое требование обусловлено частым использованием двойных кавычек в строковых литералах.
Неправильно:

Предупреждение(НСтр("ru=Переменная типа ""Строка""")); 
Предупреждение(НСтр("ru=""Переменная типа ""Строка"""""));

Правильно:

Предупреждение(НСтр("ru='Переменная типа ""Строка""'"));

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

Неправильно:

ТекстСообщения = НСтр("ru = 'Остаток выданных подотчетному лицу денежных средств: '")
+ ВыборкаИзРезультатаЗапроса.ОстатокУПодотчетногоЛица;

Правильно:

ТекстСообщения = НСтр("ru = 'Остаток выданных подотчетному лицу денежных средств:'")
+ " " + ВыборкаИзРезультатаЗапроса.ОстатокУПодотчетногоЛица;

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

ЗапросПоВерсиям = Новый Запрос(" 
|ВЫБРАТЬ 
|Версии.Ссылка, 
|ВЫБОР КОГДА Версии.Выпущена = ИСТИНА 
| ТОГДА ""(выпущена)"" 
| ИНАЧЕ ""(в  разработке )"" 
|КОНЕЦ КАК ТекстПояснения 
| ИЗ 
|  Справочник .Версии КАК Версии");

Правильно:

ЗапросПоВерсиям = Новый Запрос(" 
|ВЫБРАТЬ 
|Версии.Ссылка, 
|ВЫБОР КОГДА Версии.Выпущена = ИСТИНА 
| ТОГДА &ТекстВыпущеннойВерсии 
| ИНАЧЕ &ТекстНеВыпущеннойВерсии 
|КОНЕЦ КАК ТекстПояснения 
| ИЗ 
| Справочник.Версии КАК Версии"); 

ЗапросПоВерсиям.УстановитьПараметр("&ТекстВыпущеннойВерсии", НСтр("ru='(выпущена)'")); 
ЗапросПоВерсиям.УстановитьПараметр("&ТекстНеВыпущеннойВерсии", НСтр("ru='(в разработке)'"));

6. При использовании функции Формат для вывода дат следует учитывать, что в различных странах приняты различные порядок следования и разделители для составных частей даты.
Например, одна и та же дата: 20.12.2012 – для России, 12/20/2012 – для США.

Поэтому вместо явного задания формата даты

Формат(Дата, "ДФ=dd.MM.yyyy")

следует использовать локальный формат даты:

Формат(Дата, "ДЛФ=D")

Другой некорректный пример:

Формат(ДатаУтверждения, "ДФ='дд ММММ гггг'") + " г."

Правильно:

Формат(ДатаУтверждения, "ДЛФ=ДД")

7.1. При задании формата в полях ввода в формах и полях отчетов на базе СКД также следует использовать локальные форматы даты.

7.2. В полях форм со списками выбора следует всегда устанавливать свойство РежимВыбораИзСписка в значение Истина. В этом случае, в поле будет корректно выводиться локализуемое представление , а не значение из списка выбора.

7.3. При переопределении стандартных представлений полей в отчетах на базе СКД следует придерживаться тех же правил, что и в коде модулей. Например, неправильно

"N " + ВОтветНаНомер + " от " + Формат(ВОтветНаДата, "ДФ=dd.MM.yyyy")

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

СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'N%1 от %2'"),
ВОтветНаНомер,
Формат(ВОтветНаДата, "ДЛФ=D"))

Примечание: функция СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку доступна при использовании в конфигурации Библиотеки стандартных подсистем.

8. Исключение из этого правила составляют отдельные случаи.

8.1. Автогенерируемые строки, которые программно записываются в информационную базу и выводятся пользователям.
Например, автогенерируемый комментарий к проводке, параметр ИмяСобытия метода ЗаписьЖурналаРегистрации.

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

Такие места в коде рекомендуется сопровождать комментарием, поясняющим причину исключения из правила:

Комментарий = НСтр("ru = ' Комментарий  к проводке'", Метаданные.ОсновнойЯзык.КодЯзыка); // строка записывается в ИБ

При использовании в конфигурации Библиотеки стандартных подсистем для получения кода основного языка следует использовать функцию КодОсновногоЯзыка общего модуля ОбщегоНазначенияКлиентСервер.

8.2. Не локализуются строковые константы с внутренними идентификаторами, которые не выводятся пользователям. К ним не следует применять функцию НСтр.
Например:

Тип("Массив")
Возврат "ОперацияВыполненаУспешно";
Оповестить("Запись_Файл", Новый Структура("Событие", "ВерсияСохранена"), ФайлСсылка);
ОткрытьФорму("Справочник.НаборыДополнительныхРеквизитовИСведений.Форма.РедактированиеСоставаНаборов");

и т.п.

8.3. Тексты запросов также не локализуются.


Нас находят: 1с 8 2 вывести предупреждение со значением переменной, СтроковыеФункцииКлиентСервер ПодставитьПараметрыВСтроку(, в 1с форматная строка даты ДФ=dd MM yyyy или ДЛФ=D, СтроковыеФункцииКлиентСервер ПодставитьПараметрыВСтроку, Сообщить(НСтр( 1С 8 2 проблемы с текстом, СтроковыеФункцииКлиентСервер, СтроковыеФункцииКлиентСервер переменная, 1C 8 2 функция НСтр, СтроковыеФункцииКлиентСервер ПодставитьПараметрыВСтроку не работает, функция нстр 1с


Подписка на новости RSS     Добавьте в закладки Google fusion     Мы в Google+    

 

Мы ВКонтакте

 

Мы на Facebook