قاموس JSON

ترجمة بالذكاء الاصطناعي لملفات قاموس JSON باستخدام Lingo.dev CLI

ما هو قاموس JSON؟

قاموس JSON هو تنسيق توطين يخزن جميع الترجمات للغات متعددة في ملف JSON واحد. يحتوي كل مفتاح على كائن برموز اللغات كمفاتيح والنصوص المترجمة كقيم، مما يسهل صيانة جميع الترجمات في مكان واحد.

على سبيل المثال:

{
  "navigation": {
    "en": "Home"
  },
  "buttons": {
    "submit": {
      "en": "Submit"
    },
    "cancel": {
      "en": "Cancel"
    }
  },
  "forms": {
    "login": {
      "username": {
        "en": "Username"
      }
    }
  }
}

ما هو Lingo.dev CLI؟

Lingo.dev CLI هو واجهة سطر أوامر مجانية ومفتوحة المصدر لترجمة التطبيقات والمحتوى بالذكاء الاصطناعي. تم تصميمه ليحل محل برامج إدارة الترجمة التقليدية مع التكامل مع خطوط الأنابيب الحالية.

لمعرفة المزيد، راجع نظرة عامة.

حول هذا الدليل

يشرح هذا الدليل كيفية ترجمة ملفات قاموس JSON باستخدام Lingo.dev CLI.

ستتعلم كيفية:

  • إنشاء مشروع من الصفر
  • تكوين خط أنابيب الترجمة
  • إنشاء ترجمات بالذكاء الاصطناعي

المتطلبات الأساسية

لاستخدام Lingo.dev CLI، تأكد من تثبيت Node.js الإصدار 18 أو أحدث:

❯ node -v
v22.17.0

الخطوة 1. إعداد المشروع

في دليل مشروعك، أنشئ ملف i18n.json:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

يحدد هذا الملف سلوك خط أنابيب الترجمة، بما في ذلك اللغات المراد الترجمة بينها ومكان وجود المحتوى القابل للتوطين في نظام الملفات.

لمعرفة المزيد حول الخصائص المتاحة، راجع i18n.json.

الخطوة 2. تكوين اللغة المصدر

اللغة المصدر هي اللغة والمنطقة الأصلية التي كُتب بها المحتوى الخاص بك. لتكوين اللغة المصدر، قم بتعيين خاصية locale.source في ملف i18n.json:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

يجب توفير اللغة المصدر كـ علامة لغة BCP 47.

للحصول على القائمة الكاملة لرموز اللغات التي يدعمها Lingo.dev CLI، راجع رموز اللغات المدعومة.

الخطوة 3. تكوين اللغات المستهدفة

اللغات المستهدفة هي اللغات والمناطق التي تريد ترجمة المحتوى الخاص بك إليها. لتكوين اللغات المستهدفة، قم بتعيين خاصية locale.targets في ملف i18n.json:

{
  "$schema": "https://lingo.dev/schema/i18n.json",
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {}
}

الخطوة 4. إنشاء المحتوى المصدر

إذا لم تكن قد قمت بذلك بالفعل، قم بإنشاء ملف قاموس JSON يحتوي على المحتوى المراد ترجمته.

ملاحظة: أثناء عملية الترجمة، سيتم استبدال ملفات المحتوى المصدر لتتضمن المحتوى المترجم (بالإضافة إلى المحتوى المصدر).

الخطوة 5. إنشاء حاوية

  1. في ملف i18n.json، أضف كائن "json-dictionary" إلى كائن buckets:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "json-dictionary": {}
      }
    }
    
  2. في كائن "json-dictionary"، حدد مصفوفة من نمط واحد أو أكثر من أنماط include:

    {
      "$schema": "https://lingo.dev/schema/i18n.json",
      "version": "1.10",
      "locale": {
        "source": "en",
        "targets": ["es"]
      },
      "buckets": {
        "json-dictionary": {
          "include": ["./example.json"]
        }
      }
    }
    

    تحدد هذه الأنماط الملفات المراد ترجمتها ويمكن أن:

    • تشير إلى مسارات ملفات محددة (مثل "some/dir/file.json")
    • تستخدم النجمات كعناصر بديلة (مثل "some/dir/*.json")

    أنماط glob التكرارية (مثل **/*.json) غير مدعومة.

الخطوة 6. تكوين نموذج لغوي كبير

يستخدم Lingo.dev CLI نماذج لغوية كبيرة (LLMs) لترجمة المحتوى باستخدام الذكاء الاصطناعي. لاستخدام أحد هذه النماذج، تحتاج إلى مفتاح API من مزود مدعوم.

للبدء بأسرع وقت ممكن، نوصي باستخدام Lingo.dev Engine — منصتنا المستضافة الخاصة التي توفر 10,000 رمز مميز من الاستخدام المجاني الشهري:

  1. قم بالتسجيل للحصول على حساب Lingo.dev.

  2. قم بتشغيل الأمر التالي:

    npx lingo.dev@latest login
    

    سيؤدي هذا إلى فتح المتصفح الافتراضي الخاص بك ويطلب منك المصادقة.

  3. اتبع التعليمات.

الخطوة 7. إنشاء الترجمات

في الدليل الذي يحتوي على ملف i18n.json، قم بتشغيل الأمر التالي:

npx lingo.dev@latest run

يقوم هذا الأمر بـ:

  1. قراءة ملف i18n.json.
  2. العثور على الملفات التي تحتاج إلى ترجمة.
  3. استخراج المحتوى القابل للترجمة من الملفات.
  4. استخدام نموذج اللغة الكبير المُكوَّن لترجمة المحتوى المستخرج.
  5. كتابة المحتوى المترجم مرة أخرى إلى نظام الملفات.

في المرة الأولى التي يتم فيها إنشاء الترجمات، يتم إنشاء ملف i18n.lock. يتتبع هذا الملف المحتوى الذي تمت ترجمته، مما يمنع إعادة الترجمة غير الضرورية في عمليات التشغيل اللاحقة.

مثال

example.json (قبل الترجمة)

{
  "navigation": {
    "en": "Home"
  },
  "buttons": {
    "submit": {
      "en": "Submit"
    },
    "cancel": {
      "en": "Cancel"
    }
  },
  "messages": {
    "welcome": {
      "en": "Welcome to our application"
    },
    "error": {
      "en": "An error occurred"
    }
  },
  "forms": {
    "login": {
      "title": {
        "en": "Login"
      },
      "fields": {
        "username": {
          "en": "Username"
        },
        "password": {
          "en": "Password"
        }
      }
    }
  }
}

example.json (بعد الترجمة)

{
  "navigation": {
    "en": "Home",
    "es": "Inicio"
  },
  "buttons": {
    "submit": {
      "en": "Submit",
      "es": "Enviar"
    },
    "cancel": {
      "en": "Cancel",
      "es": "Cancelar"
    }
  },
  "messages": {
    "welcome": {
      "en": "Welcome to our application",
      "es": "Bienvenido a nuestra aplicación"
    },
    "error": {
      "en": "An error occurred",
      "es": "Ha ocurrido un error"
    }
  },
  "forms": {
    "login": {
      "title": {
        "en": "Login",
        "es": "Iniciar sesión"
      },
      "fields": {
        "username": {
          "en": "Username",
          "es": "Nombre de usuario"
        },
        "password": {
          "en": "Password",
          "es": "Contraseña"
        }
      }
    }
  }
}

i18n.json

{
  "version": "1.10",
  "locale": {
    "source": "en",
    "targets": ["es"]
  },
  "buckets": {
    "json-dictionary": {
      "include": ["./example.json"]
    }
  },
  "$schema": "https://lingo.dev/schema/i18n.json"
}

i18n.lock

version: 1
checksums:
  455da9346f4e772000927cd2ff5bb898:
    navigation: 104a3db3b671c04e167eafbe21e57881
    buttons/submit: 7c91ef5f747eea9f77a9c4f23e19fb2e
    buttons/cancel: 2e2a849c2223911717de8caa2c71bade
    messages/welcome: 1308168cca4fa5d8d7a0cf24e55e93fc
    messages/error: 53a2b5f5e7d83c737c8e02fe18fb4bdb
    forms/login/title: f4f219abeb5a465ecb1c7efaf50246de
    forms/login/fields/username: 2ee65bc2dd2f12cf2672f95b2a054bf8
    forms/login/fields/password: 223a61cf906ab9c40d22612c588dff48
  a8f80a1a4e0e0aa2750e514a8a6abacf:
    navigation: 104a3db3b671c04e167eafbe21e57881
    buttons/submit: 7c91ef5f747eea9f77a9c4f23e19fb2e
    buttons/cancel: 2e2a849c2223911717de8caa2c71bade
    messages/welcome: 1308168cca4fa5d8d7a0cf24e55e93fc
    messages/error: 53a2b5f5e7d83c737c8e02fe18fb4bdb
    forms/login/title: f4f219abeb5a465ecb1c7efaf50246de
    forms/login/fields/username: 2ee65bc2dd2f12cf2672f95b2a054bf8
    forms/login/fields/password: 223a61cf906ab9c40d22612c588dff48