| 
    
            
         
         | 
    
    
  | 
Словарь интерфейса на разных языках | ☑ | ||
|---|---|---|---|---|
| 
    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) лучше отдельные стурктуры под разные языки. 
        так меньше памяти нужно.  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |