Перевод фронтэнда
При загрузке страницы, помимо прочей статики загружается словарь со сделанными ранее переводами, которые используются функциями переводов в javascript коде на фронтенде. Функция перевода, прежде всего ищет перевод в загруженном словаре и если его нет, отправляет запрос на сервер, а ответом пополняет локальный словарь. Запрос на сервер также соответственно пополняет серверный словарь и при следующей загрузки страницы, этот перевод уже будет в базовом словаре.
Функции для перевода
- toLangGoCore и toLangGoCoreP* (на фронтенде) - Предназначена для переводов кастомных текстов в сообщениях для пользователей или элементах интерфейсов. Используется в коде, являющегося частью ядра. Переводы попадают в таблицу “Перевод прочего (GoCore)”.
- toLang и toLangP* - Аналагичны представленным выше функциям toLangGoCore и toLangGoCoreP, но используются разработчиками при работе с интерфейсами Проекта, а не ядра. Переводы попадают в таблицу “Перевод прочего (Project)”. Используйте именно эти функции для своего кода.
*Отличие между функциями без “P” в окончании и с ним: Функция с “P” ассинхронная и используется там, где предусмотренн вызов ассинхронных функций. Она, как и описано выше, берет из кэша или ожидает завершения перевода (ограниченное время) и только если перевод не был найден или сделан за отведенное время, вернет исходный текст. Там где нельзя вызвать ассинхронную функцию, вызывается обычная. Она возвращает перевод из кэша, а если нет, то запускает процесс перевода, но сама, тут же возвращает исходный текст. При следующем вызове того той же функции/метода, пользователь уже получит переведенное сообщение/верстку (если перевод успеет завершиться).
Все описанные методы имеют одинаковую сигнатуру
const toLang = (text: string, lang?: string, srcSys?:string): string =>
- text - исходный текст, который надо перевести
- lang - по умолчанию берется установленный для пользователя.
- srcSys - Системное имя источника. Должно быть заведено в БД. Позволяет разделять переводы по компонентам.
Хорошей практикой является внутри отдельного компонента, написать функцию обертку, которая будет вызывать основную функцию с нужным источником. См. в примерах.
Примеры
Использование в компоненте Таблиц
const toLn = (text)=>{
return toLangGoCore(text, null, 'FRONT_CLASSIC_TABLE');
}
// ....
btnObj = {
title: toLn('Create'),
colorClass: 'green',
iconClass: 'fa-plus',
className: 'ct-btn-create-inline'
}
В формах проекта можно использовать просто не передавая необязательные параметры
const hint1 = toLang('Чтобы управлять проектом, используйте административный аккаунт')
или если есть возможность подождать (при необходимости)
async function prepareData(data) {
const activeBtnTitle = await toLangP(data?.activeBtnTitle || 'Перейти в профиль')
// ...
}