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