المؤلف:
    إنشاء:2026-09-02آخر تحديث:2026-09-02

    هل أصبحت مكتبة vue-i18n قديمة في عام 2026؟

    في مجتمع Vue، قلما تجد مكتبة تحظى بانتشار مماثل لـ vue-i18n. قاد تطويرها Kazupon منذ أيام Vue 2، وهي تشكل ركيزة @nuxtjs/i18n وتعتبر الخيار الطبيعي لكل من يريد بناء تطبيق Vue متعدد اللغات.

    ومع ذلك، أظهرت اختبارات الأداء لعام 2026 مفارقة غير متوقعة: تبيّن أن vue-i18n هي أثقل بيئة تشغيل للتدويل بين كل أطر العمل التي تم قياسها.

    ففي مشروع أساسي خفيف باستخدام Vite + Vue لا يتعدى 31.5 كيلوبايت، أدى إدراج vue-i18n إلى رفع متوسط حجم JavaScript في الصفحة إلى 136.4 كيلوبايت، أي أكثر من 4 أضعاف الحجم الأصلي.

    كيف انتهى المطاف بإطار عمل معروف بالخفة إلى حمل مثل هذا العبء الثقيل للتدويل؟ وهل لا يزال نموذج وقت التشغيل التقليدي مقبولاً اليوم؟

    النقاط الرئيسية

    أثقل بيئة تشغيل تم اختبارها:

    بحجم يبلغ 24.3 كيلوبايت مضغوطة بـ gzip (نحو 83.2 كيلوبايت minified) قبل إضافة أي ترجمات، تصبح vue-i18n أثقل بنحو 9 أضعاف من محرك intlayer (2.7 كيلوبايت).

    زيادة 330% في حمولة الصفحة:

    رفعت vue-i18n حجم الصفحة الأساسية من 31.5 كيلوبايت إلى 136.4 كيلوبايت. بينما استقرت Intlayer عند 59.3 كيلوبايت، محققة حمولة أخف بنسبة 56%.

    مترجم متخفٍ داخل المتصفح:

    ما لم تضبط أسماء مستعارة (aliases) خاصة في أداة الحزم، ترسل vue-i18n افتراضياً مترجم نصوص كاملاً للمتصفح ليقوم بتحليل العبارات لحظياً أثناء التشغيل.

    وتيرة التحديثات:

    شهدت vue-i18n قرابة 259 تعديلاً (commit) خلال العام المنصرم، تركزت على إصلاح الأعطال ومواكبة إصدارات Vue.

    غياب الأدوات المتقدمة الرسمية:

    لا يتوفر دعم رسمي لخادم لغة (LSP)، أو خوادم MCP للذكاء الاصطناعي، أو أدوات الترجمة عبر سطر الأوامر.

    الصيانة مقارنة بالحلول الحديثة

    المستودع النجوم إجمالي التعديلات التعديلات / سنة آخر تعديل
    intlify/vue-i18n stars commits yearly last
    aymericzip/intlayer stars commits yearly last

    الأداء خلال الاثني عشر شهراً الأخيرة:

    • intlify/vue-i18n: 259 تعديلاً (صيانة دورية لـ Vue 3 وNuxt).
    • aymericzip/intlayer: 4,343 تعديلاً (تطوير مستمر لتحسينات المترجم وخادم LSP وأدوات الوكلاء الأذكياء).

    Star History Chart

    المكتبة العريقة تمنح شعوراً بالاستقرار. لكن تطوير الواجهات الحديثة بات يستند إلى تحويلات شجرة الإعراب (AST) أثناء البناء، والتخلص من الشيفرات الخاملة، والترجمة بالذكاء الاصطناعي. ومن الصعب على البنى المحصورة في وقت التشغيل استيعاب هذه الآليات.

    القياسات في بيئة Vite + Vue

    أُجري الاختبار على تطبيق يضم 10 صفحات و10 لغات باستخدام Vite وVue 3:

    تحميل JSON الديناميكي

    تحميل الترجمات ببطء في وقت التشغيل

    JSON المحدد (أسماء المحيط)

    مساحات أسماء الترجمة لكل صفحة

    مقياس أداء I18n

    ما هو هذا المقياس؟

    الحجم الإجمالي المضغوط بتنسيق gzip لحزمة مكتبة التدويل. وهي تتضمن فقط المزود ومنطق استرداد المحتوى بعد تقليل الحجم (tree-shaking) والضغط (minification).

    لماذا هو مهم؟

    يقلل حجم المكتبة الأصغر من حمولة JavaScript الأولية، مما يؤدي إلى سرعة التنزيل وأوقات التنفيذ على العميل.

    عرض كـ

    تم الاختبار في متصفحات فعلية مع تفعيل ضغط gzip. التفاصيل متوفرة في توثيق مقارنة أداء Vue.

    العبء الأولي للمكتبات

    الحجم قبل تضمين ملفات الترجمة:

    المكتبة الحجم (gzip) الحجم المصغر (Minified)
    vue-i18n@11.4.0 24.3 KB 83.2 KB
    intlayer@8.7.12 2.7 KB 7.6 KB

    محرك تشغيل vue-i18n وحده يستهلك 24.3 كيلوبايت (gzip)، وهو ما يقارب حجم نواة Vue ذاتها. بينما تكتفي Intlayer بـ 2.7 كيلوبايت.

    حجم الصفحات وتسريب المحتوى

    الإعداد متوسط JS / صفحة (gz) تسريب اللغات تسريب الصفحات الأخرى متوسط المكون (gz)
    الأساس (دون i18n) 31.5 KB 0.0% 90.0% 0.9 KB
    vue-i18n 136.4 KB 50.2% 90.0% 196.0 KB
    Intlayer 59.3 KB 51.1% 0.0% 6.5 KB

    أهم الملاحظات

    تضخم نسبي مرتفع:

    بما أن حجم Vue المبدئي خفيف جداً (~31 كيلوبايت)، فإن إضافة vue-i18n تضاعف حمولة الصفحة بأكثر من أربع مرات.

    تسريب البيانات إلى مسارات أخرى:

    بشكل افتراضي، 90% من الترجمات التي يستقبلها المسار تخص صفحات أخرى. تلغي Intlayer هذا الهدر كلياً لتبلغ النسبة 0.0%.

    ضخامة المكونات المعزولة:

    بلغ متوسط حجم المكونات ذات النطاق المحلي نحو 196 كيلوبايت في vue-i18n نتيجة تكرار القواميس، مقابل 6.5 كيلوبايت في Intlayer.

    لماذا تعد vue-i18n ثقيلة؟

    شحن مترجم AST إلى المتصفح

    تحتوي vue-i18n على مترجم داخلي لتنسيق الرسائل. قواعد الجمع والتبديل تُحول إلى أشجار إعراب (AST) مباشرة في المتصفح أثناء العمل.

    لتجنب ذلك، يتطلب الأمر توجيه اسم مستعار في أداة الحزم نحو vue-i18n/dist/vue-i18n.runtime.esm-bundler.js والترجمة المسبقة عبر @intlify/unplugin-vue-i18n. وهو إجراء تتجاهله مشاريع كثيرة.

    منظومة وظائف أحادية

    تجمع vue-i18n بين محركات التواريخ والأرقام، والرسائل المرتبطة، وجسور Options API القديمة ($t, v-t)، والوكلاء التفاعليين. حتى إن أردت نصوصاً بسيطة في <script setup>، تُحمل المكتبة بكامل ثقلها.

    المفاتيح الديناميكية تمنع الـ Tree-shaking

    تفسير مفتاح مثل "home.hero.title" في وقت التشغيل يعمي أدوات الحزم عن تحديد النصوص المستعملة فعلياً. فتبقى الترجمات غير المستخدمة داخل الملفات المنشورة.

    Hero.vue
    <script setup>
    import { useI18n } from "vue-i18n";
    
    const { t } = useI18n();
    </script>
    
    <template>
      <h1>{{ t("home.hero.title") }}</h1>
    </template>
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

    يستطيع مترجم Intlayer تتبع الخصائص المطلوبة تحديداً واستبعاد ما عداها قبل بناء ملفات العميل. تعرف على المزيد في تحسين الحزم.

    تجربة المطورين

    ملفات منفصلة مقابل التجاور المباشر

    في vue-i18n، توضع الترجمات في مجلد locales/ بعيد. أما Intlayer فتتيح وضع ملفات المحتوى بجوار المكونات مباشرة:

    locales/en.json
    {
      "hero": {
        "title": "Ship in every language"
      }
    }
    
    locales/ar.json
    {
      "hero": {
        "title": "أطلق منتجك بكل اللغات"
      }
    }
    
    Hero.vue
    <script setup>
    import { useI18n } from "vue-i18n";
    
    const { t } = useI18n();
    </script>
    
    <template>
      <h1>{{ t("hero.title") }}</h1>
    </template>
    
    Hero.content.ts
    import { t, type Dictionary } from "intlayer";
    
    export default {
      key: "hero",
      content: {
        title: t({
          en: "Ship in every language",
          ar: "أطلق منتجك بكل اللغات",
        }),
      },
    } satisfies Dictionary;
    
    Hero.vue
    <script setup>
    import { useIntlayer } from "vue-intlayer";
    
    const { title } = useIntlayer("hero");
    </script>
    
    <template>
      <h1>{{ title }}</h1>
    </template>
    

    عند إعادة تسمية أو حذف Hero.vue، يتم التعامل مع ملف المحتوى الخاص به بصورة متزامنة.

    الإكمال التلقائي في مواجهة أمان الأنواع الشامل

    توفر DefineLocaleMessage اقتراحات بناءً على ملف اللغة الأساسية. لكنها تعجز عن رصد النقص في بقية اللغات. فغياب مفتاح من ar.json لن يعرقل بناء TypeScript.

    في Intlayer، تخضع القواميس لتدقيق حازم. وتفعيل strictMode يوقف البناء فوراً إذا كانت هناك ترجمة ناقصة في أي لغة مستهدفة.

    أدوات المحررات والذكاء الاصطناعي

    الأداة vue-i18n Intlayer
    إضافة VS Code إضافات مجتمعية (i18n Ally) إضافة رسمية
    خادم اللغة (LSP) ❌ غير متوفر LSP مخصص
    خادم MCP للذكاء الاصطناعي ❌ غير متوفر خادم MCP مدمج
    مهارات الوكلاء (Skills) ❌ غير متوفر مهارات ذاتية
    نظام CMS مرئي ❌ غير متوفر نظام CMS مفتوح ومجاني

    إدارة الترجمات

    لا توفر vue-i18n أوامر داخلية لإنشاء أو ملء الترجمات. وعادة ما يضطر الفريق لتصدير الملفات إلى منصات مثل Crowdin أو Phrase.

    تأتي Intlayer بهذه المزايا مدمجة:

    الإكمال الآلي بالذكاء الاصطناعي محلياً (intlayer fill):

    يترجم المفاتيح الناقصة باستخدام مفاتيح API الخاصة بك من OpenAI أو Anthropic أو Mistral أو Gemini.

    نظام إدارة محتوى مرئي ذاتي الاستضافة:

    شغّل Intlayer CMS لتمكين كتاب المحتوى من تعديل العبارات برؤية حية مع الحفظ المباشر في Git.

    ترخيص مفتوح:

    كافة الأدوات والمكونات متاحة تحت رخصة Apache 2.0.

    متى تظل vue-i18n ملائمة؟

    إذا كان التوجيه في مشروعك مرتبطاً بشدة بـ @nuxtjs/i18n، فقد لا يكون التغيير مجدياً في الوقت الراهن.

    إذا كان التطبيق يعتمد بشكل مكثف على الرسائل المتسلسلة وقواعد التنسيق الخاصة.

    حين لا يمثل حجم الحزمة عاملاً حاسماً في نجاح التطبيق.

    كيف أطور إعدادات vue-i18n الحالية في مشروعي؟

    توفر Intlayer حزم توافق مباشرة تحتفظ بنفس تواقيع دوال مكتبات vue-i18n و@nuxtjs/i18n مثل useI18n و$t و<i18n-t>. لن تحتاج إلى إعادة كتابة القوالب أو الدوال التركيبية (composables) للاستفادة من مزايا البنية الخفيفة المعتمدة على المترجم.

    يتم الإعداد عبر أمر واحد فقط:

    bash
    npx intlayer init --interactive
    

    تقوم هذه الأداة التفاعلية بما يلي تلقائياً:

    1. تثبيت حزمة التوافق @intlayer/vue-i18n أو @intlayer/nuxt-i18n.
    2. ضبط الأسماء المستعارة (aliases) في أداة الحزم (Vite أو Nuxt) لتوجه استدعاءاتك وقوالبك الحالية مباشرة نحو Intlayer، مما يتيح لك إزالة vue-i18n من ملف package.json.
    3. تفعيل تشخيصات خادم اللغة (LSP) داخل المحرر مباشرة، والتخلص من محلل AST الذي يزن 24 كيلوبايت من حزمة العميل، وتشغيل أدوات الترجمة الآلية بالذكاء الاصطناعي محلياً دون تعديلات معقدة.

    للاطلاع على الخطوات التفصيلية، راجع أدلتنا المتخصصة:

    افحص حمولة وتوافق موقعك عبر ماسح SEO للتدويل المجاني:

    مقالات مقترحة

    التعليقات

    لا توجد تعليقات بعد. كن أول من يشارك أفكاره.

    مقالات ذات صلة

    آخر المقالات