مترجم النقاش

||||
-|-|
:discourse2: | الملخص | مترجم Discourse يقوم بترجمة المنشورات على Discourse باستخدام واجهات برمجة التطبيقات (APIs) الخاصة بـ Microsoft أو Google أو Yandex.
:hammer_and_wrench: | رابط المستودع | https://github.com/discourse/discourse-translator
:open_book: | دليل التثبيت | كيفية تثبيت الإضافات في Discourse

الميزات

  • يتم ترجمة كل منشور مرة واحدة فقط لكل لغة محلية، مما يوفر لك :moneybag:
    • ملاحظة: يتم أيضًا تشغيل اكتشاف اللغة مرة واحدة لكل منشور. كن حذرًا عند تمكين ذلك على المنتديات القديمة والكبيرة.
  • يتم تخزين رمز الوصول (Access Token) على جانب الخادم لترجمات أسرع.
  • ترجمات محدودة بمعدل 3 في الدقيقة افتراضيًا (يمكن للمسؤولين تكوين هذه القيمة)

خدمات الترجمة المدعومة

خطوات التكوين

Microsoft
  1. اتبع الخطوات الواردة في Microsoft Translator API على Azure للحصول على مفتاح الاشتراك. يمكنك الاختيار من بين عروض الاشتراك المتاحة.

  2. في Discourse الخاص بك، تحت Admin > Settings > Plugins، أدخل مفتاح الاشتراك الذي حصلت عليه من الخطوات أعلاه.

  1. في Discourse الخاص بك، تحت Admin > Settings > Basic Setup، قم بتمكين allow user locale.
Google Translator
  1. انتقل إلى https://console.developers.google.com

  2. انقر على My Project

  1. انقر على :heavy_plus_sign: لإنشاء مشروع جديد

  1. أدخل اسم مشروعك وانقر على create

  2. حدد Enable API وابحث عن Google Cloud Translator API. ابحث عن زر enable وانقر عليه لتمكين الواجهة البرمجية. لاحظ أنه لا توجد طبقة مجانية لواجهة Google Translator API، لذا قد يطلب منك تمكين الفوترة.

  3. بمجرد الانتهاء، انقر على credentials في القائمة اليسرى

  1. انقر على create credentials وحدد API key. انسخ مفتاح API والصقه في إعداد الموقع translator google api key في Discourse.

  2. في Discourse، تحت Admin > Settings > Basic Setup، قم بتمكين allow user locale.

الإعدادات

الاسم الوصف
translator enabled السماح بالترجمة المضمنة للمنشورات.
translator مزود خدمة الترجمة.
translator azure subscription key مفتاح اشتراك Azure
translator azure region منطقة Azure
translator azure custom subdomain مطلوب إذا كنت تستخدم شبكة افتراضية أو جدار حماية لخدمات Azure Cognitive Services. ملاحظة: أدخل فقط النطاق الفرعي المخصص وليس نقطة النهاية الكاملة.
translator aws region منطقة AWS
translator aws key id معرف مفتاح AWS
translator aws secret access مفتاح الوصول السري لـ AWS
translator aws iam role دور IAM في AWS
translator google api key مفتاح API لـ Google
translator yandex api key مفتاح API لـ Yandex
translator libretranslate endpoint نقطة نهاية LibreTranslate
translator libretranslate api key مفتاح API لـ LibreTranslate
max translations per minute عدد الترجمات التي يمكن للمستخدم العادي إجراؤها في الدقيقة.
restrict translation by group السماح فقط للمجموعات المدرجة في القائمة البيضاء بالترجمة
restrict translation by poster group السماح فقط بترجمة المنشورات الصادرة عن المستخدمين المدرجين في القائمة البيضاء

المشكلات المعروفة

  • لا يترجم النصوص الموجودة داخل الاستطلاعات التي تم إنشاؤها بواسطة إضافة discourse-poll.
  • يتم تكبير الصور عند الترجمة.

:discourse2: مستضاف من قبلنا؟ هذه الإضافة متاحة في خطتنا Enterprise.

103 إعجابات
Advice for bilingual communities
Inline translation of posts into another language
Language Translation
Can we have have one post with two different language
Plugin for signatures?
Translate plugin installed, but no translate button
LibreTranslate Plugin -- Free and Open Source Translation API
Discourse Translator plugin is not showing for non-logged in users
What exactly are the effects of "allow user locale"
DeepL integration for Translator plugin
How do you use Discourse AI? Tell us and make it even better!
How do I get the forum here in German
Is Google translate really so expensive?
Anyone migrated to version 3 of Microsoft Translator API yet?
Moving up the translator icon
Image zoom is not working
Translating text in polls
Yandex Translation Service
Anyone Using Discourse Translator Plugin on small forum, Cost/month?
FYI, Full translation of Discourse including posts is possible
Mute ALL other languages
How to install a plugin on Discourse-hosted-Discourse?
Make a multi-language forum
How to handle users that don't really read the answers they get?
Localized email templates
Translates to user's local language
DeepL integration for Translator plugin
Javascript pop up block help
No errors, instance not coming back up after rebuild
DeepL support for Discourse Translator
Getting user profile custom field via JS
Google Translate shows "blank" page
What exactly are the effects of "allow user locale"
Virtual Keyboard hides critical editor buttons for 3.3.0-beta
Translation from Lugandan yields uncaught 500 error (in a different Discourse)
Is Automatic Translation for Most Content Now Official?
Everything is translated, help!
Virtual Keyboard hides critical editor buttons for 3.3.0-beta
Translation support about the topic content
Translates to user's local language
Structuring a multilingual community
Translate email notifications and digests into user preferred locale language
Implementing In-House Translation Features on Discourse
Include translated posts in search?
Translate email notifications and digests into user preferred locale language
Changing default language will not change the site TITLE or DESCRIPTION!
Yandex Translation Service
Simple idea for translator-assisted bilingual forum
MKJ's Opinionated Discourse Deployment Configuration
Help which plugin is in the screenshot
Übersetzung wie hier auf Meta

تم تقسيم منشور إلى موضوع جديد: أبحث عن حل لاستخدام نموذج لغوي كبير لترجمة أهم منشورات منتداي

تم تقسيم مشاركة إلى موضوع جديد: إضافة خيار لتكوين منفصل لخدمة اكتشاف اللغة

تم تقسيم مشاركة إلى موضوع جديد: هل تستضيف منتديات ديسكورس مثيلًا محليًا لـ LibreTranslate؟

أنا أستخدم LibreTranslate المستضاف ذاتيًا والذي عمل بشكل جيد في الماضي، ولكني الآن أتلقى الكثير من أخطاء “Job exception: The translator service is currently not available” المتكررة. لقد تحققت من عنوان URL الذي كان يعمل بشكل جيد في الماضي. إذا قمت بالوصول إلى عنوان URL، فستعرض صفحة الويب LibreTranslate. لا توجد حاجة لواجهة برمجة التطبيقات/رمز مميز لأن مثيل LibreTranslate الخاص بي خاص ولا يمكن الوصول إليه من الإنترنت.

تُظهر تتبع المكدس:

Message (548 copies reported)

Job exception: The translator service is currently not available.

Backtrace

/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:168:in `result'
/var/www/discourse/plugins/discourse-translator/services/discourse_translator/libretranslate.rb:85:in `detect'
/var/www/discourse/plugins/discourse-translator/plugin.rb:120:in `block in execute'
/var/www/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/var/www/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/var/www/discourse/plugins/discourse-translator/plugin.rb:119:in `execute'
/var/www/discourse/app/jobs/base.rb:305:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.0.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:292:in `block in perform'
/var/www/discourse/app/jobs/base.rb:288:in `each'
/var/www/discourse/app/jobs/base.rb:288:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:202:in `execute_job'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:170:in `block (2 levels) in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:177:in `block in invoke'
/var/www/discourse/lib/sidekiq/pausable.rb:132:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:179:in `block in invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/middleware/chain.rb:182:in `invoke'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:169:in `block in process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:113:in `local'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq.rb:44:in `block in <module:Sidekiq>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:263:in `stats'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:13:in `call'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_retry.rb:80:in `global'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:124:in `block in dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/job_logger.rb:39:in `prepare'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:123:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:168:in `process'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:78:in `process_one'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/processor.rb:68:in `run'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:8:in `watchdog'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/sidekiq-6.5.12/lib/sidekiq/component.rb:17:in `block in safe_thread'

هل لديك أي أفكار حول كيفية إصلاح هذا؟

إعجابَين (2)

خيار اللغة ‘الهندية’ غير متاح في ‘Discourse’ بعد. ولكن الترجمة ‘الهندية’ متاحة عبر خدمات مختلفة (أنا أستخدم ‘Microsoft Azure’).

إذًا، كيف يمكننا الإعداد لترجمة جميع المشاركات غير الهندية / أي مشاركات غير هندية إلى ‘الهندية’ حتى عندما تستمر واجهة Discourse باللغة الإنجليزية؟ هل هذا ممكن حتى؟

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

أحاول نشر هذا السؤال عبر المنتديات إلى منتدى المناقشة الخاص بهم أيضًا.

3 إعجابات

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

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

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

3 إعجابات

أعتقد أن هذا قد لا يكون ممكنًا، حيث سيتعين عليك التعديل على مستوى البائع (Microsoft/Google). إلا إذا كان المحتوى المترجم يخضع لميزة استبدال الكلمات، فيمكنك استخدامها.

إليك طلب ميزة:

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

بصفتي مسؤول الموقع، فوجئت بقراءة هذا:

أين يوجد هذا الإعداد المخفي؟ :smiling_face_with_sunglasses:

إعجاب واحد (1)
./launcher enter app
rails c
SiteSetting.automatic_translation_backfill_rate = <القيمة المطلوبة>
exit
exit

ولكن أعتقد أنه لم يعد موجودًا، على الأقل في الإصدارات الأحدث.

إعجابَين (2)

كيف تتعلم هذه الأشياء؟ :sweat_smile: حسنا، شكرا لك! سأنتظر ردا من الفريق، للتأكد.

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

طريقتان: باستخدام البحث و ask.discourse.com

3 إعجابات
3 إعجابات

لا تظهر الإشعارات الخاصة بالموضوع المترجم في شريط الإشعارات:

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

هل تم ترجمة منشوري أيضًا إلى اللغة غير الصحيحة عبر رابط؟


بالنظر إلى المحرر، هذا ما كتبته بالفعل:

لاحظت أن oneboxing لم يعمل أيضًا عند الترجمة.

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

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

بالنسبة للمنشور أعلاه، كانت الترجمة الآلية لدينا تواجه مشكلة وتم اكتشافها بشكل غير صحيح على أنها “إسبانية (es)”، كما حدثت ترجمة سيئة لاحقة. تم تصحيح ذلك. نحن نكرر ذلك بمطالبات أفضل للترجمات.

إعجابَين (2)

لقد تلقيت هذا الخطأ عند تثبيت إضافة discourse-translator. إصدار discourse الخاص بي هو 3.5.0.beta1.

I, [2025-04-24T01:33:20.510994 #1]  INFO -- : cd /var/www/discourse & su discourse -c 'bundle exec rake db:migrate'
        82: from /usr/local/bin/bundle:25:in `<main>'
        81: from /usr/local/bin/bundle:25:in `load'
        80: from /usr/local/lib/ruby/gems/3.3.0/gems/bundler-2.5.18/exe/bundle:20:in `<top (required)>'
     ....
        10: from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/lazy_load_hooks.rb:87:in `with_execution_control'
        9: from /var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/lazy_load_hooks.rb:94:in `block in execute_hook'
        8: from /var/www/discourse/config/application.rb:249:in `block in <class:Application>'
        7: from /var/www/discourse/lib/plugin.rb:6:in `initialization_guard'
        6: from /var/www/discourse/config/application.rb:249:in `block (2 levels) in <class:Application>'
        5: from /var/www/discourse/config/application.rb:249:in `each'
        4: from /var/www/discourse/lib/plugin/instance.rb:629:in `notify_after_initialize'
        3: from /var/www/discourse/lib/plugin/instance.rb:629:in `each'
        2: from /var/www/discourse/lib/plugin/instance.rb:631:in `block in notify_after_initialize'
        1: from /var/www/discourse/plugins/discourse-translator/plugin.rb:40:in `block in activate!'
/var/www/discourse/plugins/discourse-translator/lib/discourse_translator/inline_translation.rb:86:in `inject': protected method `register_topic_preloader_associations' called for an instance of Plugin::Instance (NoMethodError)

كيف يمكنني إصلاح ذلك؟

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

مرحبًا، يمكن التخفيف من الخطأ عن طريق تحديث Discourse أولًا قبل تثبيت الإضافة.

تم ترقية طريقة register_topic_preloader_associations من محمية إلى عامة.

4 إعجابات

شكرا، لقد نجحت في التثبيت بعد ترقية Discourse إلى أحدث إصدار.

إعجابَين (2)