Разработка многоязычных систем на платформе 1С — задача, требующая продуманного архитектурного подхода. В условиях, когда количество языков может увеличиваться, использование дублирующих реквизитов в каждом справочнике становится неэффективным. Давайте проанализируем, как построить надежную систему локализации данных.
Рассмотрим наиболее рациональные способы организации структуры базы данных:
ОбъектМетаданных, ИдентификаторОбъекта, Реквизит, Язык. Ресурс — Значение. Это позволяет не менять структуру справочников при добавлении новых языков.НСтр, в то время как динамические наименования номенклатуры лучше выносить в регистры.Главная сложность при мультиязычности — отображение корректных данных в списках. Рассмотрим, как эффективно решить задачу с Динамическими списками:
Для того чтобы не менять структуру каждого объекта, воспользуемся программной подменой текста запроса динамического списка. При открытии формы мы можем перехватить запрос и добавить в него левое соединение с нашим регистром сведений:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ТекущийЯзыкИнтерфейса = ТекущийЯзык();
ТекстЗапроса = Элементы.Список.ТекстЗапроса;
НовыйТекст = СтрЗаменить(ТекстЗапроса, "ГДЕ",
"ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Переводы КАК Переводы
ПО Переводы.Ссылка = СправочникНоменклатура.Ссылка
И Переводы.Язык = &ТекущийЯзык
ГДЕ");
Элементы.Список.ТекстЗапроса = НовыйТекст;
Список.Параметры.УстановитьЗначениеПараметра("ТекущийЯзык", ТекущийЯзыкИнтерфейса);
КонецПроцедуры
Для более глубокой интеграции в платформу 8.3 рекомендуется использовать ОбработкаПолученияПредставления. Этот метод позволяет переопределить то, как объект будет выглядеть во всех полях ввода и списках системы. В модуле менеджера объекта мы можем реализовать логику, которая при выборе элемента возвращает строку на нужном языке:
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Представление = ПолучитьНаименованиеНаЯзыке(Данные.Ссылка, ТекущийЯзык());
КонецПроцедуры
При построении подобных систем важно учитывать следующие моменты:
Язык или Объект, чтобы запросы к динамическим спискам не замедляли работу системы.Если Спр.Наименование = "Коробка"). Используйте Ссылки, УИД или предопределенные элементы. Строка — это только для отображения пользователю.ПараметрыСеанса или кэш на сервере приложений.Реализация мультиязычности — это прежде всего отказ от попыток «вписать» все языки в один реквизит. Используя регистры для хранения и программную подмену для отображения, вы получите гибкую систему, готовую к расширению без постоянной правки метаданных конфигурации.