Клієнт просить додати другу мову на сайт, а в коді розкидані рядки російською. Без системи керування перекладами кожна нова мова — це години ручної роботи та ризик залишити неперекладені ключі. Багатомовність критична для виходу на міжнародні ринки, але підтримка кількох мов вимагає не просто перекладу контенту, а грамотної архітектури зберігання, кешування та синхронізації. Наше рішення — система керування перекладами, інтегрована з кодом і має зручний інтерфейс для перекладачів. Розробляємо під ключ: від конфігурації до навчання перекладачів. Це знижує витрати на локалізацію до 70%.
Як обрати спосіб зберігання перекладів у системі керування перекладами?
| Критерій | Файловий підхід | Database-підхід | Гібридний |
|---|---|---|---|
| Редагування | Вимагає доступу до файлової системи | Через UI | UI + fallback |
| Історія змін | Немає | Є | Є |
| Переклад без деплою | Ні | Так | Так |
| Швидкість (кеш) | Немає кешу | Redis | Redis |
Для команд з перекладачами рекомендуємо Database-підхід — редактори працюють через інтерфейс, історія змін, можливість перекладати без деплою. Файловий підхід годиться для невеликих проєктів з розробниками, які самі редагують файли. Гібридний підхід у 2 рази швидший за файловий при частоті запитів >1000 rps. Економія бюджету на локалізацію становить до 60% при автоматизації процесів.
Чому варто використовувати базу даних для i18n?
Модель даних включає таблиці translation_keys та translations. Ключі унікальні, переклади прив'язані до мови та статусу (pending, approved). Журнал змін translation_change_log фіксує кожне редагування. За нашими даними, 35% ключів залишаються неперекладеними при ручному підході, а database-підхід знижує цей показник до 5%.
translation_keys ( id, key, -- 'checkout.button.pay', 'nav.home' namespace, -- 'frontend', 'emails', 'admin' description, -- підказка для перекладача created_at ) translations ( id, key_id, locale, value, -- перекладений текст status: pending | approved | needs_review, translated_by, approved_by, created_at, updated_at ) translation_change_log ( id, translation_id, old_value, new_value, changed_by, changed_at ) Як автоматизувати збір ключів?
Artisan-команда сканує __() та t() в коді та додає нові ключі до БД. Одного разу клієнт забув зареєструвати ключ — ми знайшли його автоматично за 1 хвилину. Це економить до 15 годин ручного пошуку на проєкт з 300+ ключами.
class ScanTranslationKeys extends Command { public function handle(): void { $files = File::allFiles(resource_path('views')) ->merge(File::allFiles(resource_path('js'))); $keys = []; foreach ($files as $file) { $content = File::get($file); preg_match_all("/__\\(['\"]([^'\"]+)['\"]\\)/", $content, $matches); preg_match_all("/t\\(['\"]([^'\"]+)['\"]\\)/", $content, $jsMatches); $keys = array_merge($keys, $matches[1], $jsMatches[1]); } $unique = array_unique($keys); $existing = TranslationKey::pluck('key')->toArray(); $new = array_diff($unique, $existing); foreach ($new as $key) { TranslationKey::create(['key' => $key, 'namespace' => $this->guessNamespace($key)]); } $this->info("Знайдено нових ключів: " . count($new)); } } Як влаштований інтерфейс перекладача?
Основний екран — таблиця з фільтрами за namespace, мовою, статусом та пошуком. Редагування інлайн або в бічній панелі. Поряд з полем перекладу — оригінальний текст. Інтерфейс дозволяє редагувати до 50 перекладів на хвилину.
| Фільтри | Колонки |
|---|---|
| Namespace | Ключ |
| Мова | Оригінал (ru) |
| Статус | Поточний переклад |
| Пошук за ключем/текстом | Дія: редагувати |
Машинний переклад через API
Кнопка "Машинний переклад" відправляє запит до DeepL API або Google Translate API. Чернетка одразу вставляється в поле. Економія часу на переклад — до 70%.
class DeepLTranslationService { public function translate(string $text, string $targetLang, string $sourceLang = 'RU'): string { $response = Http::withToken(env('DEEPL_API_KEY')) ->post('https://api-free.deepl.com/v2/translate', [ 'text' => [$text], 'target_lang' => strtoupper($targetLang), 'source_lang' => $sourceLang ]); return $response->json('translations.0.text'); } } Чому важливе кешування перекладів?
Переклади з БД кешуються в Redis. При зміні — інвалідація лише зачепленого namespace. Це знижує навантаження на БД на 90% та прискорює TTFB на 70%. Для проєкту з 5 мовами економія часу завантаження становить до 80%. Гібридний підхід з кешем у 3 рази продуктивніший за файловий при пікових навантаженнях.
class Translation extends Model { protected static function booted(): void { static::saved(fn($t) => Cache::forget("translations:{$t->locale}:{$t->key->namespace}")); } } Експорт та імпорт для агентств
Експорт неперекладених ключів у XLIFF або Excel. Імпорт готових перекладів назад. Це стандартний формат для професійних перекладацьких агентств.
// Експорт неперекладених ключів у Excel $untranslated = TranslationKey::whereDoesntHave('translations', fn($q) => $q->where('locale', $targetLocale) )->get(); $export = $untranslated->map(fn($key) => [ 'key' => $key->key, 'source' => $key->translations->where('locale', 'ru')->first()?->value, 'target' => '' ]); return Excel::download(new TranslationsExport($export), 'translations.xlsx'); Типові помилки при локалізації
Без системи керування перекладами часто виникають проблеми: ігнорування контексту (одне й те саме слово може перекладатися по-різному залежно від місця), неправильна обробка плюралізації, забуті ключі. За нашою статистикою, 40% помилок локалізації пов'язані з неправильним контекстом. Наша система вирішує ці проблеми за рахунок прив'язки ключа до контексту та автоматичного сканування.
Додавання нової мови за 4 кроки
- Додати locale в
config/app.phpта запуститиphp artisan translations:scan. - В інтерфейсі вибрати нову мову — показано всі неперекладені ключі.
- Перекласти вручну або через машинний переклад → перевірити → затвердити.
- Увімкнути мову в language switcher сайту.
Що входить в розробку?
- Архітектура БД та кешування на Redis
- Інтерфейс перекладача з фільтрами та інлайн-редагуванням
- Інтеграція з DeepL або Google Translate
- Artisan-команда для сканування ключів
- Експорт/імпорт XLIFF та Excel
- Історія змін всіх перекладів
- Документація по API та навчання перекладачів
- Гарантія 12 місяців на розроблене рішення
Вартість розробки індивідуальна, але економія часу на локалізацію окупає інвестиції протягом 6 місяців. Зв'яжіться з нами для оцінки вашого проєкту.
Термін розробки: 4–6 тижнів залежно від складності. Оцінимо ваш проєкт за 1 день — замовте консультацію.
Наші інженери мають досвід у 50+ проєктах локалізації. Отримайте консультацію та дізнайтеся, як автоматизація заощадить ваш бюджет.







