وثائق

توطين وهمي

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

ترجمة بديلة تحل محل كل نص بكلمات وهمية قابلة للتعرف عليها. في اللغات ذات الاتجاه من اليسار إلى اليمين، تُضاف علامات تشكيل على كل حرف وينمو النص داخل أقواس: حفظ التغييرات تتحول إلى ⟦Šáṽé çĥáñĝéš··········⟧. في اللغات ذات الاتجاه من اليمين إلى اليسار، يُعكس كل نص مع تجاوز اتجاه العرض، لذا تُقرأ الصفحة من اليمين إلى اليسار حتى قبل ظهور اللغة العربية أو العبرية.

على صفحة مُعرَضة بهذه الطريقة، تظهر ثلاث مشكلات:

  • نص عادي لم يأتِ من كتالوج الترجمات: بل يُكتب في الكود أو يُنشأ أثناء التنفيذ.
  • نص مقطوع لم يترك مساحة كافية للغات الأطول.
  • تخطيط ثابت في مكانه في صفحة ذات اتجاه من اليمين إلى اليسار، يستخدم اليسار واليمين بدلاً من البداية والنهاية.
الألمانية · ترجمة وهمية/de-DE/
سلّتك⟦سلّتك·····⟧

شحن مجاني على كل طلب

حفظ التغييرات⟦حفظ التغييرات···········⟧

الأسعار تشمل الضرائب.⟦الأسعار تشمل الضرائب.·············⟧

العربية · ترجمة وهمية/ar-SA/
سلّتك‮سلّتك‬

شحن مجاني على كل طلب

حفظ التغييرات‮حفظ التغييرات‬

الأسعار تشمل الضرائب.‮الأسعار تشمل الضرائب.‬

ما اكتشفه الفحص
  1. نص لم يأتِ من قائمة الكتالوج/{locale}/ · p#promo · “شحن مجاني على كل طلب” · runtime_text (de-DE, ar-SA)
  2. نص يتم قطعه عند زيادته/{locale}/ · button#save · “⟦حفظ التغييرات···········⟧” · clipped_text (de-DE)
  3. تخطيط لا ينعكس بشكل صحيح من اليمين إلى اليسار/{locale}/ · p#note · “padding-left: 12px” · unmirrored_layout (ar-SA)

ما تظهره الصفحات ذات الترجمة الزائفة: نفس الصفحة باللغة الألمانية، حيث تكون كل سلسلة نصية مشددة وأطول، وباللغة العربية، مع عكس النص من اليمين إلى اليسار. تحدد أداة الاستكشاف النصوص المكتوبة في الكود، وزر يقوم بقص نصه، وقاعدة تظل على الجانب الأيسر. بيانات توضيحية.

في فحص العولمة

عندما يحدد ملف الإعداد كيفية تشغيل التطبيق، فحص العولمة يُعرض صفحاته عند كل تغيير ويقوم بفحصها. يعمل على نسخة من التغيير داخل بيئة عزل خاصة بالفحص، لذا لا تصل الترجمة البديلة إلى مستودعك أو الفحوصات الأخرى:

  1. يكتب الترجمة البديلة بلغة من اليسار إلى اليمين وأخرى من اليمين إلى اليسار ضمن المشروع.
  2. يُثبّت التبعيات ويبدأ تشغيل التطبيق.
  3. يفتح كل صفحة باللغتين في متصفح مضبوط على كل لغة، ويقرأ ما هو معروض على الشاشة.
  4. يوقف التطبيق ويحذف النسخة.

ما يكتشفه يتحول إلى نتائج الفحص:

كودما يُكتشف
runtime_textنص مرئي بدون علامات ترجمة بديلة
clipped_textنص بديل مقطوع بسبب حدود الصندوق، مع overflow مخفي أو علامة حذف
unmirrored_layoutفي صفحة ذات اتجاه من اليمين إلى اليسار: صفحة غير مصممة لاتجاه من اليمين إلى اليسار، نص محاذى أو عائم إلى اليسار أو اليمين، أو عنصر موضوع أو له هامش أو حشو من اليسار أو اليمين

النص نفسه الموجود في كلا اللغتين يُعتبر نتيجة واحدة. تظهر النتائج في "نتائج المهمة" الخاصة بالمهمة نتائج المشكلات مع تفاصيل الصفحة والعنصر والنص واللغات، مثل /{locale}/ · p#promo · “Free shipping on every order” · runtime_text (de-DE, ar-SA).

يتم الإبلاغ عنها ولا تمنع أي شيء حتى تقرر أنت. تحت ضبط الجودة → العولمة، عرض الصفحات يُعطل هذه الخطوة، و مشكلات الصفحة التي تُرسل تغييرًا للإصلاح يختار أي أكواد تُعتبر عائقًا.

التطبيق الذي لا يُثبّت أو لا يبدأ التشغيل يُبلغ عنه على أنه غير مُعرض، مع إظهار مخرجاته، وليس كعرض نظيف. يحتفظ بالتغيير فقط عندما تمنع مشكلات الصفحة.

إعداد الإعدادات

إضافة world.render إلى .coroid/i18n.json:

{
  "world": {
    "render": {
      "start": "npm run dev",
      "pages": ["/{locale}/", "/{locale}/pricing", "/{locale}/checkout"]
    }
  }
}
حقلالمعنى
startيبدأ تشغيل التطبيق. يجب أن يستمع على المنفذ المحدد في $PORT؛ HOST هو 127.0.0.1
pagesحتى عشرة مسارات، ابتداءً من جذر التطبيق. {locale} تتحول إلى علامة اللغة، لذا /{locale}/pricing يفتح /de-DE/pricing؛ استخدم /?lang={locale} إذا كانت اللغة معلمة استعلام
directoryمجلد التطبيق داخل المستودع، إذا لم يكن الجذر
installالأمر الذي يُثبّت التبعيات. بدونه، يشغّل Coroid أمر npm عند وجود package.json يُعلن عن أي
localesحتى ثلاث لغات مستهدفة للعرض. بدونه، تُستخدم أول لغة من اليسار إلى اليمين وأول لغة من اليمين إلى اليسار
readyTimeoutMsالمدة الزمنية التي يمكن أن يستغرقها التطبيق للرد، 120,000 مللي ثانية بشكل افتراضي

يرسل المتصفح أيضًا كل لغة كلغته المفضلة، لذا يعمل التطبيق الذي يختار لغته من المتصفح دون الحاجة إلى {locale}.

يتطلب الحقل إصدار CLI 1.16.0 أو أحدث في "دبوس الإصدار" الخاص بإعدادات cli ؛ فالمحرك القديم يرفض هذا الإعداد.

ما تم استثناؤه

يقرأ الفحص فقط ما يراه الشخص. يتجاهل العناصر المخفية، والكود (code، pre، kbd، samp), وقيم حقول النماذج نفسها، والعناصر المُعلَّمة بـ translate="no"، aria-hidden="true"، data-i18n-ignore أو التي تحمل الفئة notranslate. الكلمات الموجودة في قائمة "إعدادات"، مثل أسماء المنتجات، لا تُبلغ عنها كنص عادي. world.allow النص الموجود في قائمة "إعدادات"، مثل أسماء المنتجات، لا يُبلغ عنها كنص عادي.

النص القادم من بياناتك الخاصة، مثل أسماء المنتجات أو محتوى المستخدم، لا تترجمه كتالوجات الترجمات أيضًا. علّم الحاوية الخاصة به بـ translate="no" أو data-i18n-ignore، مما يخبر أدوات ترجمة المتصفح أيضًا بتركه دون تغيير.

جرّبه بنفسك

الترجمة البديلة جزء من أداة سطر الأوامر. شغّلها في نسخة مؤقتة للفحص، لأنها تستبدل ترجمات اللغة:

coroid-i18n pseudo --locale de-DE                # accented and longer
coroid-i18n pseudo --locale ar-SA                # reversed, right to left
coroid-i18n pseudo --locale de-DE --style rtl    # choose the style yourself

ثم ابدأ تشغيل التطبيق وافتح صفحاته بهذه اللغة. تظل العناصر النائبة والأشكال الجمع وعلامات التنسيق كما هي، لذا يعمل التطبيق كالمعتاد. تظل صفحات Markdown وMDX كما هي.