98 lines
3.0 KiB
TypeScript
98 lines
3.0 KiB
TypeScript
const translations: Record<string, string> = {
|
||
users: 'Пользователи',
|
||
roles: 'Роли',
|
||
permissions: 'Права',
|
||
personas: 'Личности',
|
||
bots: 'Боты',
|
||
tags: 'Теги',
|
||
bottags: 'Теги ботов',
|
||
conversations: 'Диалоги',
|
||
messages: 'Сообщения',
|
||
usersearchlogs: 'Логи поиска',
|
||
author: 'Автор',
|
||
user: 'Пользователь',
|
||
bot: 'Бот',
|
||
tag: 'Тег',
|
||
persona: 'Личность',
|
||
name: 'Название',
|
||
botname: 'Имя бота',
|
||
personaname: 'Имя личности',
|
||
tagname: 'Имя тега',
|
||
avatar: 'Аватар',
|
||
backstory: 'Предыстория',
|
||
greeting: 'Приветствие',
|
||
description: 'Описание',
|
||
descriptionprompt: 'Описание / промпт',
|
||
visibility: 'Видимость',
|
||
draft: 'Черновик',
|
||
birthdate: 'Дата рождения',
|
||
appearance: 'Внешность',
|
||
heightweight: 'Рост / вес',
|
||
age: 'Возраст',
|
||
activepersona: 'Активная личность',
|
||
conversation: 'Диалог',
|
||
conversationtitle: 'Название диалога',
|
||
role: 'Роль',
|
||
content: 'Содержимое',
|
||
sentat: 'Отправлено',
|
||
tokencount: 'Токены',
|
||
startedat: 'Начало',
|
||
lastmessageat: 'Последнее сообщение',
|
||
status: 'Статус',
|
||
firstname: 'Имя',
|
||
lastname: 'Фамилия',
|
||
phonenumber: 'Телефон',
|
||
email: 'E-mail',
|
||
approle: 'Роль приложения',
|
||
custompermissions: 'Индивидуальные права',
|
||
bottagsbot: 'Теги этого бота',
|
||
bottagstag: 'Связи тега с ботами',
|
||
conversationsbot: 'Диалоги бота',
|
||
conversationspersona: 'Диалоги личности',
|
||
conversationsuser: 'Диалоги пользователя',
|
||
messagesconversation: 'Сообщения диалога',
|
||
personasuser: 'Личности пользователя',
|
||
botsauthor: 'Боты автора',
|
||
usersearchlogsuser: 'Логи поиска пользователя',
|
||
usersapprole: 'Пользователи роли',
|
||
query: 'Запрос',
|
||
scope: 'Область поиска',
|
||
slug: 'Слаг',
|
||
nsfw: 'NSFW',
|
||
};
|
||
|
||
function normalizeKey(value: string) {
|
||
return value.toLowerCase().replace(/[^a-z0-9а-яё]/gi, '');
|
||
}
|
||
|
||
export function humanize(str: string) {
|
||
if (!str) {
|
||
return '';
|
||
}
|
||
|
||
const raw = str.toString().trim();
|
||
const normalized = normalizeKey(raw);
|
||
|
||
if (translations[raw]) {
|
||
return translations[raw];
|
||
}
|
||
|
||
if (translations[normalized]) {
|
||
return translations[normalized];
|
||
}
|
||
|
||
const prepared = raw
|
||
.replace(/([a-z0-9])([A-Z])/g, '$1 $2')
|
||
.replace(/([А-ЯЁ])([А-ЯЁ][а-яё])/g, '$1 $2')
|
||
.replace(/^[\s_]+|[\s_]+$/g, '')
|
||
.replace(/[_\s]+/g, ' ')
|
||
.trim();
|
||
|
||
const preparedNormalized = normalizeKey(prepared);
|
||
if (translations[preparedNormalized]) {
|
||
return translations[preparedNormalized];
|
||
}
|
||
|
||
return prepared.replace(/^[a-zа-яё]/i, (m) => m.toUpperCase());
|
||
}
|