Как реализовать мультиязычность в мобильном приложении на 1С без правки форм?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Создание масштабируемого мультиязычного мобильного приложения на платформе 1С сталкивается с ограничениями стандартного механизма НСтр, так как он требует внесения изменений в конфигурацию при добавлении каждого нового языка. Рассмотрим способы, которые позволят сделать ваш проект гибким, модульным и готовым к расширению без необходимости выпуска обновлений приложения в магазинах.

Архитектурный подход «Словарь»

Вместо жесткой привязки строковых констант к элементам формы, перейдем к использованию архитектуры, основанной на таблице-словаре. Суть заключается в том, что все текстовые ресурсы выносятся за пределы метаданных конфигурации.

  1. Создадим структуру данных (справочник или регистр сведений), где будем хранить переводы. Основные поля такой структуры: КлючСообщения (уникальный идентификатор), КодЯзыка, ТекстПеревода.
  2. Вместо прямого указания текста в свойствах элементов управления, будем использовать функцию-обертку.

Реализуем функцию ПолучитьТекст, которая при запуске приложения или смене языка будет подгружать необходимые значения в кэш (например, в Соответствие). Это позволит приложению моментально «подхватывать» новые языки при загрузке данных из внешнего источника.


Функция ПолучитьТекст(КлючСообщения) Экспорт
    Если ГлобальныйКэшПереводов.Свойство(КлючСообщения) Тогда
        Возврат ГлобальныйКэшПереводов[КлючСообщения];
    Иначе
        Возврат \"[\" + КлючСообщения + \"]\";
    КонецЕсли;
КонецФункции

Использование внешних файлов локализации

Для реализации по-настоящему гибкой системы рекомендуем использовать внешние файлы формата JSON или XML. Такой подход позволяет хранить языковые пакеты на сервере. Приложение при старте проверяет версию файлов на сервере и, в случае появления нового языка или обновления переводов, скачивает их и обновляет локальное хранилище.

Разберем этапы автоматизации:

Особенности верстки и динамического интерфейса

При использовании динамической подмены текста помните о том, что длина слов на разных языках может значительно отличаться. Чтобы интерфейс не «поплыл»:

  1. Всегда устанавливайте для элементов формы свойство Растягивать или АвтоМаксимальнаяШирина.
  2. При проектировании формы закладывайте запас по ширине для текстовых меток.
  3. Используйте горизонтальные и вертикальные группы для автоматического пересчета размеров элементов управления при обновлении их содержимого.

Практические советы по внедрению

Чтобы упростить старт, проанализируйте готовые примеры локализаций игровых движков, которые используют аналогичную модель «языковых пакетов». Основной принцип везде един: приложение знает только идентификатор сообщения, а «словарь» подставляет значение, соответствующее текущим настройкам пользователя.

Реализуя такой механизм, вы получаете возможность добавлять поддержку новых языков «на лету». Это критически важно для мобильных продуктов, где процесс обновления через App Store или Google Play может занимать несколько дней, в то время как загрузка файла из вашей серверной части происходит мгновенно для всех пользователей.

Таким образом, отказ от НСтр в пользу табличного представления данных позволяет масштабировать приложение практически бесконечно, делая процесс поддержки мультиязычности простым и автоматизированным.

← На главную