Вход | Регистрация
 
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
(6) а должны храниться, так же как и на всех остальных языках.
(7) действительно, для большинства элементов форм реализована возможность отображения на разных языках. Но я имею ввиду о самостоятельно-генерируемых сообщениях в коде, например, через банальное Сообщить();
   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
(29) лучше отдельные стурктуры под разные языки.
так меньше памяти нужно.
 
 Рекламное место пустует


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.