|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
travelekb 25.02.20 - 10:57 | Здравствуйте.
Имею необходимость в создании самописной конфигурации на разных языках. В зависимости от локализации все интерфейсные сообщения должны выводиться на том, или ином языке. Подскажите, как можно оптимально реализовать данную возможность? Я вижу это так: * создаю Справочник "СловарьИнтерфейса" * заполняю необходимыми выражениями * в момент необходимости вывода сообщения пользователю, получаю запросом из Справочника нужную фразу в нужной локализации * отображаю пользователю. Для себя вижу большой минус в том, что каждый раз нужно делать, хоть и внеконтекстный, но серверный вызов (для получения фразы из Справочника). При старте системы хотелось бы единоразово загрузить в память словарь фраз в нужной локали, например, через Структуру, после чего получать необходимые фразы уже из нее, без обращения к серверу каждый раз. Прошу помощи в том, как можно это реализовать в системе? Начинающий, поэтому заранее прошу прощения, за возможно простой вопрос. Спасибо. | ||
vicof 1 - 25.02.20 - 11:21 | Добавить язык и указывать синонимы не? | ||
travelekb 2 - 25.02.20 - 11:23 | (1) я имел ввиду сообщения, которые выводятся программно, например, заголовок функции "ПоказатьВводСтроки" | ||
pechkin 3 - 25.02.20 - 11:25 | а прям в коде прописать, как 1с рекомендует? | ||
travelekb 4 - 25.02.20 - 11:25 | Сейчас реализовано так:
Заголовок = НСтр("ru = 'Введите номер:'; en = 'Enter number:'"); Оповещение = Новый ОписаниеОповещения("ПослеВводаТрекНомера", ЭтотОбъект, Параметры); ПоказатьВводСтроки(Оповещение, , Заголовок); т.е. сама фраза "зашита" в коде. Я хотел бы вынести это в отдельный словарь, с возможностью корректировки фраз в пользовательском режиме. | ||
travelekb 5 - 25.02.20 - 11:26 | (3) так сделано, но как же "гибкость" и "удобство"? 1С действительно так и рекомендует? | ||
vicof 6 - 25.02.20 - 11:27 | (5) Ну на русском языке же сообщения в словаре не хранятся. | ||
pechkin 7 - 25.02.20 - 11:27 | гибкость - есть тулза для редактирования текстов многоязычных и усе | ||
vicof 8 - 25.02.20 - 11:30 | +(6) Можешь, конечно, хранить. Но это дополнительный геморрой с идентификацией этих сообщений, усложнением вывода, добавлением запросов при выводе сообщений и доступом к справочнику. Оно надо? | ||
lEvGl 9 - 25.02.20 - 11:31 | что плохого в обращении к серверу, если это и так происходит на каждом шагу? ерунда какая то | ||
travelekb 10 - 25.02.20 - 11:32 | |||
VladZ 11 - 25.02.20 - 11:32 | (4) "Я хотел бы вынести это в отдельный словарь, с возможностью корректировки фраз в пользовательском режиме." - не нужно в пользовательском. Кесарю - кесарево, а слесарю - слесарево! | ||
vicof 12 - 25.02.20 - 11:33 | (9) Чем меньше, тем лучше | ||
vicof 13 - 25.02.20 - 11:33 | (11) А пользователю использованное) | ||
travelekb 14 - 25.02.20 - 11:33 | (9) возможно Вы и правы, но вся имеющаяся учебная литература назойливо твердит о том, что настоятельно рекомендуется уменьшать количество вызовов сервера. | ||
VladZ 15 - 25.02.20 - 11:41 | Я бы делал так:
1. Тексты сообщений хранил бы в ТабличномДокументе в виде Код сообщения - Тест сообщения. Табличный документ для каждого языка свой. 2. Сообщения в табличном документе должны быть разделены по секциям: по видам документов, в которых они используются. Если есть какие-то общие сообщения - выделить их в отдельную секцию. 3. При создании объекта на сервере получать все нужные тексты сообщений в ТаблицуЗначений (по секции документа + общие для всех). 4. При выводе получать сообщение по Коду сообщения из ТЗ п.3. В итоге: 1. Все сообщения в одном месте. 2. Обращения к серверу минимальны. | ||
travelekb 16 - 25.02.20 - 11:43 | (15) Благодарю! Буду пробовать | ||
pechkin 17 - 25.02.20 - 11:50 | (15) а как ты табл документ будешь читать? или без сервера это без сервера БД. тогда тут повторные значения спасают | ||
VladZ 18 - 25.02.20 - 11:52 | (17) НаСервереБезКонтекста, если я правильно понял вопрос. | ||
pechkin 19 - 25.02.20 - 11:54 | (18) ну и где ж тогда без вызова сервера? | ||
pechkin 20 - 25.02.20 - 11:54 | или при открытии формы читать все сообщения? | ||
VladZ 21 - 25.02.20 - 11:56 | (20) ПриСозданииНаСервере | ||
080808Ник 22 - 25.02.20 - 11:58 | (0) как вариант извращения. делаем обрабокту, которая выгружает тексты модулей в файлы. парсит их, формирует словарь. Правите как хотите, далее нажимаете - сохранить и все загружается в конфу. | ||
travelekb 23 - 25.02.20 - 12:15 | А никак не реализовать это через МодульСеанса или что-то подобное?
Я создаю Справочник "СловарьИнтерфейса", заполняю его значениями на разных языках. Например, ru en de wlc_msg "Привет" "Hello" "Hallo" end_msg "Прощай" "Bye" "auf Wiedersehen"Далее, в сеансе пользователя (его локаль уже будет известна), на Клиенте, например в структуру загружаются ключи и значения для нужной локали (например если пользователь работает в "en"): {wlc_msg:"Hello"},{end_msg:"Bye"} Если пользователь работает в локали "ru" - в структуре будут значения из соотвествующего реквизита ("ru") Справочника
В момент необходимости вывода информационного сообщения, я просто получаю из структуры значение по ключу. | ||
pechkin 24 - 25.02.20 - 12:17 | параметры сеанса тоже на сервере хранятся | ||
travelekb 25 - 25.02.20 - 12:22 | (24) понял, спасибо. | ||
080808Ник 26 - 25.02.20 - 12:37 | (23) вы представляете сколько в памяти придется держать строк текста? | ||
travelekb 27 - 25.02.20 - 13:19 | (26) а сколько? Ну будет там 3-5 десятка фраз. Не считаю что это так много. | ||
novichok79 28 - 25.02.20 - 13:25 | хранить где-нибудь в табличном документе, общем.
или в макете объекта метаданных. при создании на сервере читать это дело в структуру, реквизит формы. или вообще держать переменную типа соответствие в модуле формы, чтобы текст туда-сюда не гонять, а держать на клиенте. ну как-то так при первом приближении. | ||
unenu 29 - 25.02.20 - 14:03 | для самых быстрых извращений(при условии, что ОП валом и диски большие) можно так // Метод общего модуля повторного использования с установкой "На время сеанса" Функция СтвЗаголовки() СтвЗаголовки = Новый Соответствие; СтвЗаголовки.Вставить("wlc_msg", Новый Структура("ru,en,de", "Привет", "Hello", "Hallo")); СтвЗаголовки.Вставить("end_msg", Новый Структура("ru,en,de", "Прощай", "Bye", "auf Wiedersehen"));  // Возврат СтвЗаголовки; КонецФункции // Получение из памяти wlc_msg_en = _ОбщийМодульПовтИсп.СтвЗаголовки().СтвЗаголовки.Получить("wlc_msg").en; | ||
pechkin 30 - 25.02.20 - 14:42 | Рекламное место пустует |
|
Список тем форума
|