Розробка системи управління перекладами (i18n) сайту

Клієнт просить додати другу мову на сайт, а в коді розкидані рядки російською. Без системи керування перекладами кожна нова мова — це години ручної роботи та ризик залишити неперекладені ключі. Багатомовність критична для виходу на міжнародні ринки, але підтримка кількох мов вимагає не просто перекл

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 2062 послуг
Розробка системи управління перекладами (i18n) сайту
Складний
від 1 тижня до 3 місяців

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1418
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1285
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    983
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1242
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    983
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    997

Клієнт просить додати другу мову на сайт, а в коді розкидані рядки російською. Без системи керування перекладами кожна нова мова — це години ручної роботи та ризик залишити неперекладені ключі. Багатомовність критична для виходу на міжнародні ринки, але підтримка кількох мов вимагає не просто перекладу контенту, а грамотної архітектури зберігання, кешування та синхронізації. Наше рішення — система керування перекладами, інтегрована з кодом і має зручний інтерфейс для перекладачів. Розробляємо під ключ: від конфігурації до навчання перекладачів. Це знижує витрати на локалізацію до 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 кроки

  1. Додати locale в config/app.php та запустити php artisan translations:scan.
  2. В інтерфейсі вибрати нову мову — показано всі неперекладені ключі.
  3. Перекласти вручну або через машинний переклад → перевірити → затвердити.
  4. Увімкнути мову в language switcher сайту.

Що входить в розробку?

  • Архітектура БД та кешування на Redis
  • Інтерфейс перекладача з фільтрами та інлайн-редагуванням
  • Інтеграція з DeepL або Google Translate
  • Artisan-команда для сканування ключів
  • Експорт/імпорт XLIFF та Excel
  • Історія змін всіх перекладів
  • Документація по API та навчання перекладачів
  • Гарантія 12 місяців на розроблене рішення

Вартість розробки індивідуальна, але економія часу на локалізацію окупає інвестиції протягом 6 місяців. Зв'яжіться з нами для оцінки вашого проєкту.

Термін розробки: 4–6 тижнів залежно від складності. Оцінимо ваш проєкт за 1 день — замовте консультацію.

Наші інженери мають досвід у 50+ проєктах локалізації. Отримайте консультацію та дізнайтеся, як автоматизація заощадить ваш бюджет.