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

Коли сайт зростає і виходить на нові ринки, ручне додавання мов перетворюється на хаос: рядки губляться, переклади застарівають, а кожна нова мова потребує довгих годин роботи. Ми розробляємо систему управління перекладами (i18n), яка централізує всі тексти та дає перекладачам зручний інтерфейс. Наша команда реалізує проєкт під ключ — від архітектури зберігання до навчання співробітників, забезпечуючи надійну роботу та підтримку на всіх етапах.

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

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

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

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

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1543
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1394
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1374
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1142
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1060