توطين المحتوى: يدوي وآلي باستخدام ذكاء Discourse

في هذا الموضوع، سنرشدك خلال ميزات “توطين المحتوى” (Content Localization) وكيفية تفعيلها. تنقسم الميزات إلى جزأين: ما هو متاح بشكل افتراضي في Discourse؛ و Discourse AI للترجمات التلقائية.

:warning: للوصول السريع إلى الأقسام ذات الصلة، استخدم عناوين الويكي :backhand_index_pointing_right:t2:

توطين محتوى مجتمعك

يمنحك Discourse الوصول إلى عدة ميزات توطين متاحة للتكوين في:

  • <your-site-url>/admin/site_settings/category/content_localization
توطين المحتوى في إعدادات الموقع 📸

التحضير

أولاً، من الجيد الحصول على بعض المعلومات حول مجتمعك عبر مستكشف البيانات (Data Explorer).

اللغة المفضلة عبر تفضيلات المستخدم

يمكن أن يعطيك الاستعلام التالي فكرة عن عدد المستخدمين الذين قد يكونون قد حددوا لغتهم في /my/preferences/interface.

SELECT locale, count(*) as count
FROM users
WHERE (locale IS NOT null AND locale <> '')
GROUP BY locale
ORDER BY count DESC
نتائج عينة من مستكشف البيانات

من أين يأتي مستخدموك

حل أفضل، إذا كان لديك أحداث عرض صفحات المتصفح مفعلة (إعداد الموقع)، هو هذا الاستعلام الذي يخبرك من أي بلد يأتي مستخدمك:

SELECT
  e.country_code AS country_code,
  COUNT(*) AS pageviews
FROM browser_pageview_events e
WHERE e.country_code IS NOT NULL
  AND e.country_code <> ''
GROUP BY e.country_code
ORDER BY pageviews DESC
نتائج عينة

الإعداد

بفضل المعلومات أعلاه، أصبحت الآن أكثر اطلاعاً على اللغات التي يجب أن يدعمها مجتمعك.

في <your-site-url>/admin/site_settings/category/content_localization، ابدأ في إعداد ذلك.

  • توطين المحتوى مفعّل - يفعّل الميزة التي تستبدل محتوى المستخدم المكتوب الأصلي بالمحتوى المُوَطَّن. اقرأ المزيد عن وضعَي التوطين التلقائي (AI) واليدوي (بشري).
  • اللغات المدعومة لتوطين المحتوى - قائمة اللغات التي يدعمها موقعك
  • معيار المتصفح لتوطين المحتوى - مغطى في قسم المتصفحات أدناه
  • مُبدِّل اللغة لتوطين المحتوى - مغطى مباشرة أدناه
قائمة اللغات في إعدادات الموقع 📸

مُبدِّل اللغة

تفعيل الإعداد التالي مُبدِّل اللغة لتوطين المحتوى يسمح لك أيضاً بجعل مجتمعك أكثر سهولة الوصول للمستخدمين غير المسجلين عن طريق إظهار قائمة اللغات التي اخترتها في قائمة اللغات المدعومة:

مُبدِّل اللغة في أعلى يمين الصفحة

عرض المحتوى المُوَطَّن

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

بالنسبة لمشاهدينا المسجلين متعددي اللغات، يمكنهم الإشارة إلى أنهم يفهمون لغات متعددة، لذا لن يتم ترجمة المحتوى بهذه اللغات.

الترجمات التلقائية مع Discourse AI :sparkles:

تُعد Discourse AI ضرورية للغاية لميزة التوطين، وتزيل الحاجة إلى القيام بترجمات يدوية.

كمسؤول، سترغب في التوجه إلى منطقة Discourse AI المخصصة لـ الترجمات. تغطي هذه المنطقة المخصصة:

  • تقدم الترجمة
  • إعدادات الذكاء الاصطناعي
  • إعدادات لغة التطبيق

لتغطية بعض الإعدادات والتوصيات المهمة:

  • معدل الملء الخلفي للترجمة بالذكاء الاصطناعي بالساعة - الإعداد الافتراضي لهذا هو 50 - سيقوم موقعك بترجمة 50 منشوراً، و 50 موضوعاً، و 50 فئة، و 50 وسم في الساعة، إلى اللغات التي حددتها في اللغات المدعومة لتوطين المحتوى. حافظ على هذا الرقم منخفضاً عند البدء.
  • نطاق الفئة لترجمة الذكاء الاصطناعي - الافتراضي هو الفئات العامة. يمكنك تغيير ذلك إلى جميع الفئات، أو اختيار محدد.
  • ترجمة الرسائل الشخصية بالذكاء الاصطناعي و تضمين محتوى الروبوت في ترجمة الذكاء الاصطناعي ذاتية التوضيح.
  • تاريخ البدء للملء الخلفي للترجمة بالذكاء الاصطناعي - هذه القيمة فارغة بشكل افتراضي. إذا فعّلت ميزة ترجمة الذكاء الاصطناعي “اليوم”، يتم تعيين التاريخ تلقائياً إلى “اليوم - 5 أيام”
  • وكيل ترجمة النص الخام للمنشور بالذكاء الاصطناعي (ووكلاء آخرون) - في المجتمعات الأكثر رسمية، قد يختار المسؤولون إنشاء وكيلهم الخاص. هذا يسمح لك بتعيين موجه (prompt) مضبوط بدقة أكبر على اللغة أو المفردات التي تفضلها.

يمكنك الرجوع إلى AI bot - Agents لمعرفة كيفية تكوين وكلاء مناسبين وضبط الموجهات لكل وظيفة.

التوطين اليدوي

بما أن التوطين ميزة أساسية في Discourse، فإننا نوفر لك القدرة على ملء وتحرير التوطينات يدوياً في حال عدم توفر الترجمات التلقائية مع Discourse AI.

بشكل افتراضي، يتم إعداد المسؤولين والمشرفين لتحرير التوطينات.

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

توطين الفئات

الفئات المُوَطَّنة مرئية في المناطق التالية، مع توطين كل من اسم الفئة ووصفها:

الأماكن التي تُوطَّن فيها الفئات 📸
  1. الصفحة الرئيسية، الشريط الجانبي، وقائمة الفئات المنسدلة
  1. صفحة الفئات
  1. فئة محددة ذات فئات فرعية

كمسؤول، يجب أن تكون قادراً على الوصول إلى إعدادات الفئة كما هو معتاد، وإيجاد عنصر التنقل الجديد “التوطينات” على اليسار.

تحرير توطينات الفئة في إعدادات الفئة 📸

توطين الموضوعات والمنشورات

من لقطات الشاشة أعلاه في توطين الفئات، ربما لاحظت توطين عناوين الموضوعات والمقتطفات.

هناك بعض الإعدادات المسبقة

  • تأكد من أن مستخدمك موجود في مجموعات التوطين المسموح بها للمحتوى
  • يتم إضافة زر addTranslation تلقائياً إلى قائمة المنشور و عناصر قائمة المنشور المخفية عند تفعيل توطين المحتوى مفعّل. هذا يسمح لـ :globe_with_meridians: بالظهور في قائمة المنشور للمستخدمين في مجموعات التوطين المسموح بها للمحتوى.
  • السماح للمؤلف بتوطين المحتوى مفعّل بشكل افتراضي، ويسمح لمؤلفي المنشورات بتوطين محتواهم الخاص باستخدام نفس قائمة المنشور أعلاه.
إعداد قائمة المنشور

تحرير منشور مُوَطَّن

في حال كان المستخدم قد يكون يعرض منشوراً مُوَطَّناً، ويرغب في تحريره، ستظهر مربع حوار للسؤال عن النسخة التي يفضل تحريرها:

سيظهر محرر مناسب بعد اتخاذ القرار.

توطين الشريط الجانبي المخصص

أقسام الشريط الجانبي التي تكون “مرئية للجميع” تظهر أيضاً عناصر تحكم إضافية للترجمة:

المتصفحات (Crawlers)

يمكنك السماح للمتصفحات برؤية موقعك باللغات المختلفة التي قمت بتكوينها في اللغات المدعومة لتوطين المحتوى. يوجد إعداد الموقع في قسم “توطين المحتوى” باسم معيار المتصفح لتوطين المحتوى:

النتيجة ستكون أن المتصفحات يمكنها رؤية ما يلي، حيث يكون لكل لغة مدعومة hreflang مطابق في رأس كل موضوع:

للإثبات / التحقق الإضافي

قمنا باختبار هذه الميزة بشكل مكثف، ويمكننا تأكيد أننا نحصل على فهرسة صحيحة بعد إدخال عدد X من اللغات المدعومة

الأسئلة الشائعة

لقد قمت بالإعدادات، لكن الترجمة التلقائية لا تزال لا تعمل لدي
تأكد من أنك قمت بإعداد هذه العناصر

  • اللغات المدعومة لتوطين المحتوى تحتوي على لغة واحدة على الأقل
  • توطين المحتوى مفعّل هو :check_mark:
    • السماح بلغة المستخدم هو :check_mark: (مفعّل بشكل افتراضي)
    • تعيين اللغة من ملف تعريف الارتباط هو :check_mark:
  • ترجمة الذكاء الاصطناعي مفعّلة هو :check_mark:
  • يجب أن يكون لديك نموذج لغوي كبير (LLM) يعمل لكل وكيل ترجمة

إذا فشل كل شيء آخر، يمكنك تفعيل SiteSetting.ai_translation_verbose_logs.

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

إذا كان منتداني يدعم الإنجليزية واليابانية (عبر اللغات المدعومة لتوطين المحتوى)، وأكتب شخص ما بالإسبانية، هل سيتم ترجمة منشوره؟
نعم. سيتم ترجمة جميع الموضوعات والمنشورات إلى الإنجليزية واليابانية، بغض النظر عن اللغة المكتوبة.

إذا تم تعديل المنشور الأصلي، هل يتم إعادة ترجمته؟
نعم – بحد أقصى مرتين في اليوم. عند تعديل منشور، يتم إرساله لإعادة الترجمة بعد تأخير يساوي الأكبر بين 5 دقائق أو SiteSetting.editing_grace_period لمراعاة التعديلات السريعة. لدى المستخدمين المصرح لهم في مجموعات التوطين المسموح بها للمحتوى خيار إرسال منشور لإعادة الترجمة فوراً.

هل سيتم حذف الترجمات إذا قمت بتغيير الوكيل أو نموذج لغوي كبير (LLM)؟
لا، عادةً ما تستمر الترجمات عبر تغييرات الإعدادات ما لم يتم حذفها صراحةً باستخدام عنصر قائمة المنشور أو محرر الترجمة.


25 إعجابًا
Content Localization and Automatic Translations for Your Community
I can't find discourse AI as a provider in the discourse translator plugin
2 language site
Machine-translate messages so users can read without knowing sender's language
Übersetzung wie hier auf Meta
Anonymous user language selector for Discourse
Update or Replace Header Locale Selector for New Discourse Header (widgets-end-of-life) – Is Built-in Support Available?
Translate Discourse automatically (without a button)
Help which plugin is in the screenshot
About auto translation
Auto Country Translation
How to Add Automatic Multilingual Translation Interface in Discourse?
3.6.0.beta2: Built-in palette editing, live AI translation progress, and better wiki tracking
The usage problem after using AI translation
AI translation backfill not working after all settings configured
AI translation backfill not working after all settings configured
Single post/header only partially translated -issue
Language Switcher Problem, Not Translating Posts
配置好 ai 翻译后,帖子已经被自动翻译,但是在帖子顶部和右侧没有显示语言切换按钮
Feature Request: Allow Users to Localize Only Their Own Topics
How to configure ai translate of `Ai translation backfill hourly rate`?
Seeking experience: Supporting a multilingual Discourse community
Ongoing translation in threads
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
I need help to configure LLM DeepSeek R1 0528 - free for Automatic translations with Discourse AI
Not sure how to juggle languages while setting up my francophone community
Structuring a multilingual community
Why is Discourse AI translation not working
How to set up Discourse AI for internal-only usage
AI translation of all PMs
Content localization language switcher doesn't work
This Meta Branded theme is special. Can I use it on my forum too?
Feature Request: Translation of FAQ/Terms of Service/Privacy
Single post/header only partially translated -issue
Header Locale Selector
为啥的布署的discourse不支持修改语言
Topic list is shown in a language (DE) but has one (DE) topic not translated
If topic info is too long, tags are cut off and create a blank line
Content Localization and Automatic Translations for Your Community
Images break when the page is auto-translated by a browser translation extension (S3/R2 + CDN is configured correctly)
Bearbeitung von Übersetzen Beiträgen verbessern
Why Is the Discourse AI Translation Icon Not Appearing?
Why are posts in Swedish un-translated to Finnish, default locale?
Discourse AI Translator, Planet Icon Missing
Language switcher and language content
Multilingual user feedback on Automatic Translations
Sharing approaches to using automation to send messages to members

هل هناك أي توصيات للقيام بذلك بشكل جماعي للفئات الموجودة؟ في أسوأ الأحوال، ربما عبر واجهة برمجة التطبيقات؟

إعجابَين (2)

سؤال رائع. سأحرص على تحديث وثائق واجهة برمجة التطبيقات لنقطة نهاية تحديث الفئة. :memo:

4 إعجابات

هل سيكون هناك دعم لمشرف لكل لغة؟ أفكر في الميتا – حيث قد أتطوع لفحص المشاركات بلغة معينة وتحديثها يدويًا. خاصة الوثائق التي قد ترحب ببعض اللمسات البشرية. لكنك تقول أن المشرفين فقط يمكنهم فعل ذلك وهو ما لن أكونه على الأرجح أبدًا.

3 إعجابات

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

3 إعجابات

كيف يمكنني الوصول إليه؟ هل يمكنك تقديم أمر من فضلك؟

هل لدى Sidekiq أي مهمة مرتبطة؟ هل من الممكن تشغيلها يدويًا؟

إعجاب واحد (1)
إعجابَين (2)

لإضافة إلى منشور Moin أعلاه، إنه فقط SiteSetting. ai_translation_backfill_hourly_rate بمجرد وصولك إلى وحدة التحكم. تعمل المهمة كل خمس دقائق وتحد من المعدل وفقًا لذلك.

3 إعجابات

أرى أن التوطين أصبح متاحًا الآن في المستندات. شكرًا @nat!

3 إعجابات

هذا رائع، تهانينا للفريق! أنا أختبره الآن وسأشارك أفكاري وتجربتي العامة.

نحن نفتقد لغة الإسبرانتو في القائمة؛ هل يمكن إضافة هذه اللغة “ببساطة” أم يجب بناؤها أولاً في discourse-languages؟

رائع، أنت متابع جيد – كنت على وشك الإبلاغ عن ذلك هنا. :laughing:

نعم، نوعًا ما. نريد تجربة توطين كاملة حيث يتم ترجمة عناصر التحكم (الأزرار، التسميات، إلخ) بشكل صحيح وكافٍ (70٪ ستكون جيدة حقًا) عبر Crowdin (انظر Translations - Discourse Meta)، ومع ذلك يمكننا تقديم الدعم للغة.

إعجابَين (2)

هل يعمل توطين المحتوى مع فئات الوثائق؟ يبدو لي أن محتوى الشريط الجانبي لا تتم ترجمته على الرغم من أنني أقوم بتوطين موضوع الفهرس.

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

3 إعجابات

يا لها من ملاحظة رائعة، نعم إنها لا تعمل بعد، ولكن هناك شيء سيتتبعه @nat!

أتساءل عما إذا كان هذا محفزًا للتوصل إلى تجريد أفضل / نموذج بيانات لروابط مستندات الشريط الجانبي.

إعجابَين (2)

نعم هذا صحيح – هناك العديد من الأماكن في Discourse التي ستحتاج إلى ترجمة صريحة، لذا أقوم بتسجيلها عند ظهورها. في الآونة الأخيرة، قمنا أيضًا بترجمة الإشعارات لعناوين المواضيع. هذا مثال لموضوع ميزة قمت بإنشائه - Show translated user bios.

سأقوم بإنشاء موضوع جديد وسأقوم بالإشارة إليك حتى نتأكد من تغطية جميع الجوانب في الشريط الجانبي.

تعديل: تمت تغطية tvavrda هنا - Translate sidebar documentation links. يرجى إلقاء نظرة ومعرفة ما إذا كان ذلك منطقيًا.

ماذا تقصد بـ “التبديل مرة أخرى”؟

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

إعجاب واحد (1)

أرسلت لك مقطع فيديو.

ملاحظة أخرى - لا يمكنني رؤية الفروقات في المحتوى المترجم، صحيح؟ قد يكون ذلك مفيدًا إذا كانت هناك تحديثات له. ليس مهمًا للغاية ولكنه منطقي، على ما أعتقد.

وأخرى - الروابط الخلفية تحت الموضوع لا تعرض اسم موضوع مترجم.

وسؤال: ما الهدف من ترجمة أوصاف الفئات في إعدادات الفئة؟ يجب أن يأتي وصف الفئة من النسخة المترجمة لموضوع “حول”، أليس كذلك؟ النسخة المترجمة لا تدعم تنسيق ماركداون، لذلك لا يمكنني استخدام رابط، وهو ما أود فعله.

إعجاب واحد (1)

حسناً… المكون القديم GitHub - discourse/discourse-docs-sidebar يحترم الترجمة بالفعل :slight_smile: لقد تحولت إليه مؤقتًا.

نعم، هذا غير مدعوم حاليًا وسيكون مجهودًا كبيرًا.

لدينا مؤشر صغير ملون بشكل خاص (مشابه لمؤشر تعديلات المنشور بجانبه) عندما قد يكون الترجمة قديمة لأن إصدار المنشور قد تغير.

إعجاب واحد (1)

أرى أيضًا محتوى غير مترجم في ملخصات المواضيع المثبتة. لذا أرى قائمة مواضيع باللغة المترجمة ولكن ملخص الموضوع المثبت يظهر الأصلي.

إعجاب واحد (1)

هل يمكننا تشغيل عمليات الترجمة يدويًا، ولكن هل يمكننا تشغيل بناء الترجمات يدويًا؟ نوع من المهام عند الطلب.

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

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

هل يتم إجراء تحديد موقع المحتوى مرة واحدة ثم تخزينه في مكان ما، أي ليس عند الطلب؟ إذا كان الأمر كذلك، فهل هناك أي شيء يمنعني من تشغيل Ollama وبعض نماذج LLM مفتوحة المصدر على جهازي المكتبي مثل Llama 3 أو Deepseek 3 والسماح للمهمة بالتشغيل حتى تنتهي؟

تعديل: أعتقد أنه قد يعمل على خفض تكلفة الترجمة الأولية، ولكنه لن يعمل للمنشورات الأحدث ما لم يقرر المرء إبقاء نموذج LLM المحلي قيد التشغيل بشكل دائم.