const translations: Record = { 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()); }