2026-05-12 17:58:39 +00:00

98 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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());
}