الجمع التلقائي

@lingo.dev/compiler يكتشف تلقائيًا صيغ الجمع في النص الخاص بك ويحولها إلى تنسيق ICU MessageFormat لضمان الجمع الصحيح عبر اللغات.

ما يفعله

يستخدم المترجم الذكاء الاصطناعي لاكتشاف النص الذي يحتوي على صيغ جمع (مثل "عنصر واحد" مقابل "5 عناصر") ويحولها إلى صيغة ICU MessageFormat.

قبل (الكود الخاص بك):

<p>You have {count} items</p>

بعد (المترجم):

<p>{count, plural, one {You have 1 item} other {You have # items}}</p>

اللغات المختلفة لديها قواعد جمع مختلفة. العربية لديها 6 صيغ، الروسية لديها 4، الإنجليزية لديها 2. تنسيق ICU MessageFormat يتعامل معها جميعًا بشكل صحيح.

كيف يعمل

  1. يكتشف المترجم الاستيفاءات ذات القيم الرقمية
  2. يرسل النص إلى LLM لاكتشاف صيغة الجمع
  3. يُرجع LLM نمط ICU MessageFormat إذا تم اكتشاف الجمع
  4. يُدرج المترجم الترجمة الواعية بالجمع

يحدث هذا تلقائيًا—لا حاجة لتغييرات في الكود.

التكوين

{
  pluralization: {
    enabled: true, // Default: true
    model: "groq:llama-3.1-8b-instant", // Fast model for plural detection
  }
}

النموذج: يستخدم نموذجًا منفصلاً (سريعًا) لاكتشاف الجمع للحفاظ على التكاليف منخفضة. الافتراضي هو أسرع نموذج من Groq.

أمثلة

الجمع البسيط

<p>You have {count} items in your cart</p>

يصبح:

{count, plural,
  one {You have 1 item in your cart}
  other {You have # items in your cart}
}

صيغة الصفر

<p>You have {unreadCount} unread messages</p>

يصبح:

{unreadCount, plural,
  =0 {You have no unread messages}
  one {You have 1 unread message}
  other {You have # unread messages}
}

الجمع المعقد

<p>{days} days and {hours} hours remaining</p>

يصبح:

{days, plural,
  one {1 day}
  other {# days}
} and {hours, plural,
  one {1 hour}
  other {# hours}
} remaining

قواعد خاصة باللغة

يتعامل ICU MessageFormat مع قواعد الجمع المعقدة تلقائياً:

الإنجليزية (صيغتان):

  • one: 1 item
  • other: 0 items, 2 items, 100 items

الروسية (4 صيغ):

  • one: 1, 21, 31, 41... (оди́н элеме́нт)
  • few: 2-4, 22-24... (два элеме́нта)
  • many: 0, 5-20, 25-30... (пять элеме́нтов)
  • other: 1.5, 2.5... (1.5 элеме́нта)

العربية (6 صيغ):

  • zero: 0
  • one: 1
  • two: 2
  • few: 3-10
  • many: 11-99
  • other: 100+

يُنشئ المُجمِّع الصيغ الصحيحة لكل لغة مستهدفة.

تعطيل صيغ الجمع

إذا كان تطبيقك لا يستخدم صيغ الجمع أو تريد التعامل معها يدوياً:

{
  pluralization: {
    enabled: false,
  }
}

يتخطى هذا اكتشاف صيغ الجمع بالكامل، مما يقلل من استدعاءات LLM.

صيغ الجمع اليدوية

يمكنك كتابة ICU MessageFormat مباشرة في الكود الخاص بك:

<p>
  {formatMessage(
    { id: "items", defaultMessage: "{count, plural, one {# item} other {# items}}" },
    { count }
  )}
</p>

لن يحاول المُجمِّع اكتشاف صيغ الجمع—بل يستخدم التنسيق الدقيق الخاص بك.

الأداء

يضيف اكتشاف صيغ الجمع عبئاً بسيطاً:

  • استدعاء LLM إضافي واحد لكل نص فريد يحتوي على إدراجات رقمية
  • يستخدم نموذجاً سريعاً (الافتراضي: Groq llama-3.1-8b-instant)
  • يتم تخزين النتائج مؤقتاً—تعيد عمليات البناء اللاحقة استخدام الاكتشافات

التكلفة: ضئيلة. تكلف النماذج السريعة أجزاء من السنت لكل طلب.

أسئلة شائعة

هل يعمل هذا مع جميع اللغات؟ نعم. يدعم ICU MessageFormat أكثر من 200 لغة بقواعد جمع صحيحة.

ماذا لو أخطأ الذكاء الاصطناعي؟ استخدم data-lingo-override لتحديد ترجمات دقيقة بصيغ جمع صحيحة:

<p data-lingo-override={{
  es: "{count, plural, one {1 artículo} other {# artículos}}"
}}>
  {count} items
</p>

هل يمكنني تخصيص نموذج اكتشاف صيغ الجمع؟ نعم. اضبط pluralization.model على أي LLM مدعوم. الافتراضي محسّن للسرعة والتكلفة.

هل يزيد هذا من حجم الحزمة؟ قليلاً. أنماط ICU MessageFormat أكبر قليلاً من السلاسل النصية البسيطة. التأثير ضئيل.

ماذا عن صيغ الجمع المتداخلة؟ مدعومة. يتعامل المترجم مع متغيرات متعددة بصيغة الجمع في نفس السلسلة النصية.

هل أحتاج إلى وضع علامة على صيغ الجمع؟ لا. يكتشفها المترجم تلقائياً عندما pluralization.enabled: true.

تصحيح الأخطاء

لرؤية صيغ الجمع المكتشفة، تحقق من .lingo/metadata.json:

{
  "translations": {
    "abc123": {
      "source": "You have {count} items",
      "pattern": "{count, plural, one {You have 1 item} other {You have # items}}",
      "locales": {
        "es": "{count, plural, one {Tienes 1 artículo} other {Tienes # artículos}}"
      }
    }
  }
}

يعرض حقل pattern تنسيق ICU MessageFormat الذي اكتشفه المترجم.

الخطوات التالية