|
| 1 | +# Транслитерация русского языка |
| 2 | + |
| 3 | +Проект теперь поддерживает автоматическую транслитерацию русского языка при создании постов и топиков. |
| 4 | + |
| 5 | +## Возможности |
| 6 | + |
| 7 | +### 1. Функция `transliterate()` |
| 8 | + |
| 9 | +Функция преобразует русский текст в латиницу (ГОСТ 16876-71): |
| 10 | + |
| 11 | +```typescript |
| 12 | +import { transliterate } from './lib/utils'; |
| 13 | + |
| 14 | +// Примеры: |
| 15 | +transliterate('Привет мир') // 'privet-mir' |
| 16 | +transliterate('Как дела?') // 'kak-dela' |
| 17 | +transliterate('РУССКИЙ ЯЗЫК') // 'russkiy-yazyk' |
| 18 | +transliterate('Ёлка, ёж и ёлочка') // 'yolka-yozh-i-yolochka' |
| 19 | +``` |
| 20 | + |
| 21 | +### 2. Использование при создании топиков |
| 22 | + |
| 23 | +При создании топика на русском языке автоматически сохраняется транслитерированная версия заголовка: |
| 24 | + |
| 25 | +```typescript |
| 26 | +await createTopic({ |
| 27 | + title: 'Как использовать фреймворк?', |
| 28 | + forumSlug: 'javascript', |
| 29 | + author: 'username', |
| 30 | + body: 'Содержание топика...' |
| 31 | +}); |
| 32 | + |
| 33 | +// Генерируемый файл будет содержать: |
| 34 | +// --- |
| 35 | +// title: Как использовать фреймворк? |
| 36 | +// titleTranslit: kak-ispolzovat-freymuork |
| 37 | +// forumSlug: javascript |
| 38 | +// author: username |
| 39 | +// createdAt: 2026-05-03T12:34:56.789Z |
| 40 | +// --- |
| 41 | +// |
| 42 | +// Содержание топика... |
| 43 | +``` |
| 44 | + |
| 45 | +### 3. Хранение транслитерации |
| 46 | + |
| 47 | +Транслитерация хранится в поле `titleTranslit` frontmatter-данных каждого топика: |
| 48 | + |
| 49 | +- **Исходный текст**: сохраняется в поле `title` |
| 50 | +- **Транслитерированный текст**: сохраняется в поле `titleTranslit` |
| 51 | + |
| 52 | +Это позволяет: |
| 53 | +- ✅ Использовать оригинальный русский текст для отображения |
| 54 | +- ✅ Генерировать читаемые URL'ы (slug'и) |
| 55 | +- ✅ Улучшить поиск и индексацию |
| 56 | +- ✅ Обеспечить совместимость с системами, требующими латиницы |
| 57 | + |
| 58 | +## Особенности транслитерации |
| 59 | + |
| 60 | +### Поддерживаемые символы |
| 61 | + |
| 62 | +- Все русские буквы (строчные и прописные) |
| 63 | +- Двойные буквы (ж→zh, ц→ts, ч→ch, ш→sh, щ→sch, х→kh) |
| 64 | +- Специальные буквы (ё→yo, ю→yu, я→ya) |
| 65 | +- Слогообразующие символы (ы→y, э→e) |
| 66 | + |
| 67 | +### Обрабатка текста |
| 68 | + |
| 69 | +- Пробелы преобразуются в дефисы (`-`) |
| 70 | +- Текст переводится в нижний регистр |
| 71 | +- Специальные символы удаляются (кроме дефиса) |
| 72 | +- Множественные дефисы объединяются в один |
| 73 | +- Дефисы в начале и конце удаляются |
| 74 | + |
| 75 | +## Примеры |
| 76 | + |
| 77 | +| Исходный текст | Результат транслитерации | |
| 78 | +|---|---| |
| 79 | +| Привет мир | privet-mir | |
| 80 | +| JavaScript для начинающих | javascript-dlya-nachinayushchikh | |
| 81 | +| Что нового? | chto-novogo | |
| 82 | +| Первая программа | pervaya-programma | |
| 83 | +| Ёлка на праздник | yolka-na-prazdnik | |
| 84 | + |
| 85 | +## Интеграция |
| 86 | + |
| 87 | +Функция `transliterate()` автоматически используется: |
| 88 | + |
| 89 | +1. ✅ **При создании топиков** - сохраняет `titleTranslit` |
| 90 | +2. 📋 **Готово для использования в:** |
| 91 | + - Генерации URL slug'ов |
| 92 | + - Полнотекстовом поиске |
| 93 | + - Метаданных страниц |
| 94 | + - Фильтрации и сортировке |
| 95 | + |
| 96 | +## Примечание |
| 97 | + |
| 98 | +При обновлении существующих топиков (не используется `createTopic`), поле `titleTranslit` может отсутствовать. Это нормально - приложение будет работать без ошибок благодаря опциональности поля. |
0 commit comments