Перевод бэкенда
Сообщения в возвратах методов классов, вызываемых через внетренее api переводится уже переводится автоматически (если включена настройка).
Чтобы переводить кастомные сообщения пользователю и элементы интерфейсов формируемые на бэкенде, имеются несколько функций.
Функции для перевода
- toLangProfile - переводит профайлы классов и клиентских объектов (имена сущностей (таблиц/форм) и их колонки и поля. Ожидает завершение перевода, но не более определенного времени.
- Переводы попадают в отдельные таблицы “Перевод профайлов (GoCore/Project)”. GoCore или Project зависит от того, является ли класс, для которого осуществляется перевод часть ядра или нет.
- toLangData - переводит данные из таблиц, если при их запросе из базы, перевод не был найден. Ожидает завершение перевода, но не более определенного времени.
- Переводы попадают в отдельные таблицы “Перевод данных (GoCore/Project)”. GoCore или Project зависит от того, является ли класс, для которого осуществляется перевод часть ядра или нет.
- toLangAny - переводит сообщения из ответов методов классов вызванных через внутренее api (UserOk, UserError, MyError). Косвенно используется в пользовательсих функциях (которые вызывают разработчики), но напрямую разработчик не должен ее вызывать.
- toLangGoCore и toLangGoCoreP* - Предназначена для переводов кастомных текстов в сообщениях для пользователей или элементах интерфейсов формируемых на бэкенде. Используется в коде классов и модулей, являющихся частью ядра. Переводы попадают в таблицу “Перевод прочего (GoCore)”.
- toLang и toLangP* - Аналагичны представленным выше функциям toLangGoCore и toLangGoCoreP, но используются разработчиками при работе с классами и модулями Проекта, а не ядра. Переводы попадают в таблицу “Перевод прочего (Project)”. Используйте именно эти функции для своего кода.
- toLangFrontP - Предназначена для запросов переводов с фронта. Переводы попадают в таблицы “Перевод прочего (GoCore)” и “Перевод прочего (Project)”, но имеют альтернативный источник. Принцип работы переводов для фронтенда смотри в соответсвующем разделе.
*Отличие между функциями без “P” в окончании и с ним: Функция с “P” ассинхронная и используется там, где предусмотренн вызов ассинхронных функций. Она, как и описано выше, берет из кэша или ожидает завершения перевода (ограниченное время) и только если перевод не был найден или сделан за отведенное время, вернет исходный текст. Там где нельзя вызвать ассинхронную функцию, вызывается обычная. Она возвращает перевод из кэша, а если нет, то запускает процесс перевода, но сама, тут же возвращает исходный текст. При следующем вызове того той же функции/метода, пользователь уже получит переведенное сообщение/верстку (если перевод успеет завершиться).
Примеры
Абстрактные
toLangP
/**
* Description of the "exampleAddJohn" method
* Описание метода "exampleAddJohn".
*/
@OpenApi()
async exampleAddJohn(r: IAPIRequest<{ translate: boolean }>): Promise<IAPIResponse<
{
name: string,
age?: number
greetText: string
}>> {
const rParams: IAPIParams = r.params // Если нужны какие-нибудь системные параметры запроса, например fromClient
const params: IAPIQueryParams = r.data.params
const translate = params.translate
const usr = r.client._session.usr
let res: IAPIResponse // Может быть использована многократно
res = await r.api(Crm_user, 'add', {
firstname: 'John',
lastname: 'Doe',
email: 'john.d@example.com'
})
if (res.code) return res
console.log('Added successfully. ID:', res.data.id)
const txt = 'Добро пожаловать в команду'
const greetText = translate ? await toLangP(txt) : txt
return new UserOk('Все ок', {name: usr.userData.fio, age: usr.userData.age, greetText})
}
toLang
function getNewsTitle(): string {
return toLang('Свежие новости')
}
…