פיתוח מערכת ניהול תרגומים מותאמת אישית (i18n)

ככל שהאתר גדל ונכנס לשווקים חדשים, הוספת שפות ידנית הופכת לכאוס: מחרוזות אובדות, תרגומים מתיישנים, וכל שפה חדשה דורשת שעות עבודה. אנו בונים מערכת ניהול תרגום (i18n) שמרכזת את כל הטקסטים ומעניקה למתרגמים ממשק ידידותי. הצוות שלנו מספק את הפרויקט במפתח מלא—מארכיטקטורת אחסון ועד הכשרת צוות—ומבטיח פעולה אמינה ותמיכה מתמשכת בכל שלב.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

אלה רק חלק מהסוגים הטכניים של אתרים שאנו עובדים איתם, ולכל אחד מהם יכולים להיות מאפיינים ופונקציונליות ספציפיים משלו, וכן ניתן להתאים אותם לצרכים ולמטרות הספציפיים של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פיתוח מערכת ניהול תרגומים מותאמת אישית (i18n)
מורכב
מ- 1 שבוע עד 3 חודשים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

לקוח מבקש להוסיף שפה שנייה לאתר, אבל הקוד מכיל מחרוזות ברוסית מפוזרות. ללא מערכת ניהול תרגומים, כל שפה חדשה משמעותה שעות של עבודה ידנית וסיכון להשארת מפתחות לא מתורגמים. תמיכה רב-לשונית היא קריטית לשווקים בינלאומיים, אך טיפול במספר שפות דורש לא רק תרגום תוכן אלא ארכיטקטורה מוצקה לאחסון, מטמון וסנכרון. הפתרון שלנו — מערכת ניהול תרגומים המשולבת בקוד וכוללת ממשק ידידותי למתרגמים. אנו מפתחים אותה במפתח מלא: מהגדרה ועד הדרכת מתרגמים. זה מקצץ עלויות לוקליזציה בעד 70%.

כיצד לבחור גישת אחסון תרגומים במערכת ניהול תרגומים?

קריטריון מבוסס קבצים מבוסס מסד נתונים היברידי
עריכה דורש גישה למערכת הקבצים דרך ממשק המשתמש ממשק משתמש + גיבוי
היסטוריית שינויים לא כן כן
תרגום ללא פריסה לא כן כן
מהירות (מטמון) ללא מטמון Redis Redis

לצוותים עם מתרגמים, אנו ממליצים על הגישה מבוססת מסד הנתונים — עורכים עובדים דרך הממשק, היסטוריית שינויים זמינה, וניתן לבצע תרגומים ללא פריסה. הגישה מבוססת הקבצים מתאימה לפרויקטים קטנים שבהם מפתחים עורכים קבצים ישירות. הגישה ההיברידית מהירה פי 2 ממבוססת קבצים בקצבי בקשות מעל 1000 rps. אוטומציה של תהליכים חוסכת עד 60% מתקציב הלוקליזציה.

למה להשתמש במסד נתונים ל-i18n?

מודל הנתונים כולל טבלאות translation_keys ו-translations. מפתחות הם ייחודיים, תרגומים מקושרים לשפה ולסטטוס (ממתין, מאושר). translation_change_log עוקב אחר כל עריכה. מניסיוננו, 35% מהמפתחות נשארים לא מתורגמים בגישה ידנית, בעוד הגישה מבוססת מסד הנתונים מפחיתה זאת ל-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 סורקת קריאות 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 ) ו-__() בקוד ומוסיפה מפתחות חדשים למסד הנתונים. פעם אחת לקוח שכח לרשום מפתח — מצאנו אותו אוטומטית תוך דקה. זה חוסך עד 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));
    }
}

כיצד נראה ממשק המתרגם?

המסך הראשי הוא טבלה עם מסננים לפי מרחב שמות, שפה, סטטוס וחיפוש. העריכה היא בתוך השורה או בחלונית צדדית. הטקסט המקורי נמצא ליד שדה התרגום. הממשק מאפשר עריכה של עד 50 תרגומים בדקה.

מסננים עמודות
מרחב שמות מפתח
שפה מקור (אנגלית)
סטטוס תרגום נוכחי
חיפוש לפי מפתח/טקסט פעולה: עריכה

תרגום מכונה דרך 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. כאשר תרגום משתנה, רק מרחב השמות המושפע נפסל. זה מפחית עומס על מסד הנתונים ב-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 ל-t() והרץ 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)); } } .
  2. בממשק, בחר את השפה החדשה — כל המפתחות הלא מתורגמים מוצגים.
  3. תרגם ידנית או דרך תרגום מכונה → סקירה → אישור.
  4. הפעל את השפה במתג השפות של האתר.

מה כלול בפיתוח?

  • ארכיטקטורת מסד נתונים ומטמון Redis
  • ממשק מתרגם עם מסננים ועריכה בתוך השורה
  • אינטגרציה עם DeepL או Google Translate
  • פקודת Artisan לסריקת מפתחות
  • ייצוא/ייבוא XLIFF ו-Excel
  • היסטוריית שינויים לכל התרגומים
  • תיעוד API והדרכת מתרגמים
  • אחריות ל-12 חודשים על הפתרון שפותח

עלות הפיתוח היא אישית, אבל הזמן שנחסך בלוקליזציה מחזיר את ההשקעה תוך 6 חודשים. צור קשר להערכת פרויקט.

לוח זמנים לפיתוח: 4–6 שבועות בהתאם למורכבות. אנו נעריך את הפרויקט שלך תוך יום אחד — בקש ייעוץ.

למהנדסים שלנו יש ניסיון ב-50+ פרויקטי לוקליזציה. קבל ייעוץ וגלה כיצד אוטומציה יכולה לחסוך בתקציב שלך.