Интерфейс на нескольких языках. Настройка приложения
Введение
Comindware Platform позволяет создать интерфейс приложения на различных языках. Можно настроить отображаемые названия форм, полей, кнопок и пунктов навигации на разных языках, а также дать пользователем возможность переключаться между доступными языками.
Здесь представлена инструкция по настройке шаблонов записи для отображения интерфейса на русском и английском языках, а также кнопки для смены языка интерфейса.
См. также пример вычисления значения атрибут типа «Список значений» на определённом языке.
Прикладная задача
Имеется приложение «Управление автопарком».
Требуется настроить шаблон «Заявки на автомобили», связанный с ним шаблон «Тип автомобиля», форму «Заявка на автомобиль» и раздел навигации «Управление автопарком», которые будут поддерживать отображение на русском и английском языках.
Формы «Заявка на автомобиль» и раздел навигации «Управление автопарком» должны отображаться на языке, заданном в аккаунте текущего пользователя.
Также требуется настроить кнопку смены языка отображения интерфейса приложения и языка в аккаунте текущего пользователя.
Логика работы многоязычного интерфейса
- Для переключения языка отображения форм и навигации мы используем:
- отдельные формы и разделы навигации на английском и русском языках;
- правила для форм, скрывающие и показывающие формы в соответствии с языком пользователя;
- специальные группы и роли для пользователей, использующих приложение на английском и русском языках;
- шаблон аккаунта, служащий для смены языка в аккаунтах пользователей;
- две кнопки, которые будут менять язык отображения приложения.
- Формы и разделы навигации на английском языке будут скрыты для пользователей, у которых в аккаунте задан русский язык. И наоборот, для пользователей с английским языком будут отображаться английские формы и разделы навигации.
- При входе пользователя приложение будет отображаться на языке, указанном в его аккаунте, и для него будет отображаться раздел навигации, назначенный роли с соответствующим языком.
- Для пользователя будет отображаться одна из кнопок смены языка — на английский в русском интерфейсе и на русский — в английском.
- При нажатии кнопки смены языка пользователь будет перемещён в группу с требуемым языком, при этом будет изменён язык в его аккаунте. Формы станут отображаться на заданном языке. В результате смены группы пользователю будет назначена новая роль с разделом навигации на требуемом языке.
- Для отображения приложения на новом языке пользователь должен обновить страницу в веб-браузере.
Настройка шаблона записи «Тип автомобиля»
- Создайте шаблон записи «Тип автомобиля».
-
Создайте атрибуты:
Название Системное имя Тип данных Название RU NameRU
Текст Название EN NameEN
Текст -
Добавьте атрибут «Отображаемое название»:
- Тип данных: текст
- Использовать как заголовок записей: флажок установлен
- Вычислять автоматически: флажок установлен
- Вычисляемое выражение: формула
IF (USER()->language=='ru', VALUE($NameRU, $NameEN), VALUE($NameEN, $NameRU))
-
Поместите созданные атрибуты на форму шаблона «Тип автомобиля».
-
Создайте записи со следующими значениями:
Название RU Название EN легковой car автобус bus грузовой truck
Настройка шаблона записи «Заявки на автомобили»
Названия полей на разных языках
Для удобства настройки одинаковых форм и разделов навигации на разных языках задавайте унифицированные названия шаблонов и атрибутов на требуемых языках через /
, например «Номер заявки / Request Number».
При настройке полей на формах и разделов навигации для каждого языка оставьте только соответствующие отображаемые названия.
Например, для поля «Номер заявки / Request Number» на английской форме в отображаемом названии удалите часть «Номер заявки /» и оставьте текст «Request Number», а на русской форме наоборот — «Номер заявки».
- Создайте шаблон записи «Заявки на автомобили / Vehicle requests».
- Создайте атрибуты «Номер заявки / Request Number» и «Количество пассажиров / Amount of passengers» типа «Число».
- Создайте атрибут «Тип автомобиля / Vehicle Type» типа «Запись», связанный с шаблоном «Тип автомобиля».
- Создайте форму «Форма на русском» и поместите на неё атрибуты.
- Отредактируйте отображаемые названия полей, оставив только русский текст.
- Сохраните форму.
- Создайте форму «Форма на английском» и поместите на неё атрибуты.
- Отредактируйте отображаемые названия полей, оставив только английский текст.
- Сохраните форму.
- Откройте для редактирования форму «Заявки на автомобили / Vehicle requests — Основная форма»
- Поместите на основную форму форму на русском и форму на английском.
- Создайте правило для основной формы.
-
Добавьте в правило для формы следующее действие:
- Элемент формы: Форма на русском
- Действие: изменить доступ
- Новое значение: скрыть
- Условие выполнения: формула
EQUALS(USER()->language,"en")
Это действие будет скрывать форму на русском для пользователей, у которых в аккаунте задан английский язык.
-
Добавьте в правило для формы следующее действие:
- Элемент формы: Форма на английском
- Действие: изменить доступ
- Новое значение: скрыть
- Условие выполнения: формула
OR(EQUALS(USER()->language,"ru"),EMPTY(USER()->language))
Это действие будет скрывать форму на английском для пользователей, у которых в аккаунте задан русский язык или язык не задан.
-
Сохраните форму.
Настройка групп, ролей и раздела навигации
- Создайте группу «Пользователи RU» и добавьте в неё аккаунты пользователей, которые будут использовать приложение на русском языке.
- Создайте роль «Пользователь RU» и добавьте в неё группу «Пользователи RU».
- Настройте права доступа для роли согласно логике работы приложения.
- Создайте группу «Пользователи EN» и добавьте в неё аккаунты, которые будут использовать приложение на английском языке.
- Создайте роль «Пользователь EN» и добавьте в неё группу «Пользователи EN».
- Настройте права доступа для роли.
- Создайте раздел навигации «Управление автопарком» и назначьте его роли «Пользователь RU».
- Добавьте в этот раздел навигации шаблон записи «Заявки на автомобили / Vehicle requests» и смените название пункта на «Заявки на автомобили».
- Создайте раздел навигации «Fleet management» и назначьте его роли «Пользователь EN».
- Добавьте в этот раздел навигации шаблон записи «Заявки на автомобили / Vehicle requests» и смените название пункта на «Vehicle requests».
Настройка кнопки переключения языка
- Создайте шаблон аккаунта «Пользователи».
- Перейдите на вкладку «Кнопки».
-
Создайте кнопку «Switch to English» со следующими свойствами:
- Контекст операции: аккаунт
- Операция: C#-скрипт
- Результат выполнения: обновить данные
-
На вкладке «Скрипт» введите C#-скрипт по следующему образцу:
using System;
using System.Collections.Generic;
using System.Linq;
using Comindware.Data.Entity;
using Comindware.TeamNetwork.Api.Data.UserCommands;
using Comindware.TeamNetwork.Api.Data;
using Comindware.Data;
class Script
{
public static UserCommandResult Main(UserCommandContext userCommandContext, Comindware.Entities entities)
{
// Получаем ID аккаунта текущего пользователя.
var id = userCommandContext.ObjectIds[0];
// Исключаем аккаунт из группы «Пользователи RU» с ID group.1.
Api.Base.AccountGroupService.ExcludeMembers( "group.1", new List<string>(){id});
// Включаем аккаунт в группу «Пользователи EN» с ID group.2.
Api.Base.AccountGroupService.IncludeMembers( "group.2", new List<string>(){id});
var account = Api.Base.AccountService.Get(id);
// Задаём код языка en в аккаунте пользователя.
account.Language = "en";
Api.Base.AccountService.Edit(account);
// Возвращаем объект с результатом нажатия кнопки
var result = new UserCommandResult
{
Success = true,
Commited = true,
ResultType = UserCommandResultType.Notificate,
Messages = new[]
{
new UserCommandMessage
{
Severity = SeverityLevel.Normal,
// Выводим всплывающее уведомление о смене языка на английский.
Text = "Language changed to English."
}
}
};
return result;
}
}
-
На вкладке «Условия отображения» добавьте формулу:
OR(EQUALS(USER()->language,"ru"),EMPTY(USER()->language))
Кнопка «Switch to English» будет отображаться для пользователей, у которых в аккаунте задан русский язык или язык не задан.
-
Сохраните кнопку.
-
Создайте кнопку «Переключить на русский» со следующими свойствами:
- Контекст операции: аккаунт
- Операция: C#-скрипт
- Результат выполнения: обновить данные
-
На вкладке «Скрипт» добавьте C#-скрипт по следующему образцу:
using System;
using System.Collections.Generic;
using System.Linq;
using Comindware.Data.Entity;
using Comindware.TeamNetwork.Api.Data.UserCommands;
using Comindware.TeamNetwork.Api.Data;
using Comindware.Data;
class Script
{
public static UserCommandResult Main(UserCommandContext userCommandContext, Comindware.Entities entities)
{
// Получаем ID аккаунта текущего пользователя.
var id = userCommandContext.ObjectIds[0];
// Исключаем аккаунт из группы «Пользователи EN» с ID group.2.
Api.Base.AccountGroupService.ExcludeMembers( "group.2", new List<string>(){id});
// Включаем аккаунт в группу «Пользователи RU» с ID group.1.
Api.Base.AccountGroupService.IncludeMembers( "group.1", new List<string>(){id});
var account = Api.Base.AccountService.Get(id);
// Устанавливаем код языка ru в аккаунте пользователя.
account.Language = "ru";
Api.Base.AccountService.Edit(account);
// Возвращаем объект с результатом нажатия кнопки
var result = new UserCommandResult
{
Success = true,
Commited = true,
ResultType = UserCommandResultType.Notificate,
Messages = new[]
{
new UserCommandMessage
{
Severity = SeverityLevel.Normal,
// Выводим всплывающее уведомление о смене языка на русский.
Text = "Язык изменён на русский."
}
}
};
return result;
}
}
-
На вкладке «Условия отображения» добавьте формулу:
EQUALS(USER()->language,"en")
Кнопка «Переключить на русский» будет отображаться для пользователей, у которых в аккаунте задан английский язык.
-
Сохраните кнопку.
- Поместите обе кнопки на форму шаблона «Пользователи».
- Привяжите к шаблону «Пользователи» аккаунты, ранее добавленные в группы «Пользователи RU» и «Пользователи EN».
Тестирование
- Войдите в Comindware Platform используя аккаунт, у которого задан русский язык и который входит в группу «Пользователи RU».
- Приложение и раздел навигации должны отображаться на русском языке.
- Создайте запись в шаблоне «Заявки на автомобили / Vehicle requests».
- Форма и данные атрибута «Тип автомобиля / Vehicle Type» должны отобразиться на русском языке.
- Перейдите к шаблону «Пользователи» и нажмите кнопку «Перейти к экземплярам».
- Откройте свой аккаунт в списке.
- Нажмите кнопку «Switch to English».
- Вместо кнопки «Switch to English» должна отобразиться кнопка «Переключить на русский».
- Приложение должно отобразиться на английском языке. Если смена языка не произошла, обновите страницу в браузере.
- Перейдите к записи шаблона «Заявки на автомобиль / Vehicle requests».
- Форма и данные атрибута «Тип автомобиля / Vehicle Type» должны отображаться на английском языке.
Эта статья была полезна 1 чел.