خطأ في تغيير نصوص الموقع

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

أعتقد أن النص المترجم يحتوي على الكلمة الرئيسية “{{count}}”.

نسخة Discourse الخاصة بي محدثة، وفيما يلي معلومات السجل:

البيئة:

REQUEST_URI	/admin/customize/site_texts?q=off_
REQUEST_METHOD	GET

المعلومات:

TypeError (لا يوجد تحويل ضمني للرمز إلى عدد صحيح)
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:172:in `[]'

تتبع الأثر:

/var/www/discourse/app/controllers/admin/site_texts_controller.rb:172:in `[]'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:172:in `block in fix_plural_keys'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:171:in `map'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:171:in `fix_plural_keys'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:153:in `block in find_translations'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:151:in `each'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:151:in `find_translations'
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:30:in `index'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/abstract_controller/base.rb:194:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/rendering.rb:30:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:132:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/abstract_controller/callbacks.rb:41:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/rescue.rb:22:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `block in instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `instrument'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.3/lib/active_record/railties/controller_runtime.rb:24:in `process_action'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/abstract_controller/base.rb:134:in `process'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-5.2.3/lib/action_view/rendering.rb:32:in `process'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiling_methods.rb:104:in `block in profile_method'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal.rb:191:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_controller/metal.rb:252:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/route_set.rb:34:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:18:in `block in <class:Constraints>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:48:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/journey/router.rb:52:in `block in serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/journey/router.rb:35:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/journey/router.rb:35:in `serve'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/route_set.rb:840:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-protection-2.0.5/lib/rack/protection/frame_options.rb:31:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:68:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/tempfile_reaper.rb:15:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/conditional_get.rb:25:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/head.rb:12:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:220:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:232:in `context'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/session/abstract/id.rb:226:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/cookies.rb:670:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:98:in `run_callbacks'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/logster-2.3.1/lib/logster/middleware/reporter.rb:30:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-5.2.3/lib/rails/rack/logger.rb:38:in `call_app'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-5.2.3/lib/rails/rack/logger.rb:28:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:18:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:31:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/request_id.rb:27:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:17:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/method_override.rb:22:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/middleware/executor.rb:14:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/sendfile.rb:111:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.0.2/lib/mini_profiler/profiler.rb:281:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.2/lib/message_bus/rack/middleware.rb:57:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:169:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-5.2.3/lib/rails/engine.rb:524:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-5.2.3/lib/rails/railtie.rb:190:in `public_send'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/railties-5.2.3/lib/rails/railtie.rb:190:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:68:in `block in call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `each'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-2.0.7/lib/rack/urlmap.rb:53:in `call'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:605:in `process_client'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:700:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:548:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/lib/unicorn/http_server.rb:144:in `start'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/unicorn-5.5.1/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `load'
/var/www/discourse/vendor/bundle/ruby/2.6.0/bin/unicorn:23:in `<main>'
3 إعجابات

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

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

لغة discourse الخاصة بي هي fa_IR، ويحدث هذا بعد محاولة تغيير النص.
أحيانًا يؤدي تغيير النص إلى أخطاء، خاصة عند وجود متغيرات داخل النص.

أعتقد أن بعض المتغيرات تغيرت مع مرور الوقت لكنها لا تزال مستخدمة في الترجمات القديمة. مثل {site_title} و{site_name} أو {base_url} و{basePath} أو {base_path}.

قد لا يكون من السيئ إظهار النص الإنجليزي كتفسير للترجمة، أسفل مربع تغيير النص عندما يستخدم discourse لغة محلية مختلفة.

إعجابَين (2)

نعم، أعتقد أن هناك مشكلة في الترجمة. هل يمكنك إخبارنا بعد التبديل إلى الإنجليزية؟ هل يمكنك المساعدة في إصلاح السلاسل في Transifex؟

3 إعجابات

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

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


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

تغييرات مثل:

  • عرض النص الافتراضي باللغة الإنجليزية لكل عنصر عند تخصيص النصوص
  • عرض اقتراح المجتمع في اللغة المحلية المحددة لكل عنصر عند تخصيص النصوص
  • اقتراح ترجمة أفضل للمجتمع مباشرة
  • إمكانية تغيير الترجمات في النصوص المخزنة في قاعدة البيانات مثل رسائل النظام
  • عرض قائمة بالمتغيرات المسموح باستخدامها في النص عند تخصيص النصوص
إعجابَين (2)

لم أتمكن من تكرار مشكلة البحث عن off_ التي تعطل Discourse عند تعيين fa_IR. هل أنت متأكد من أنك تستخدم أحدث إصدار؟

@gerhard هل هذه خطأ في fix_plural_keys؟ هل يجب أن تكون أكثر تحفظًا؟ أظن أن I18n.t(key, locale: :en) قد تُرجع نظريًا قيمة غير مفردة هنا:

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

6 إعجابات

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

@nildarar أود معرفة سبب حدوث ذلك الخطأ. هل يمكنك تشغيل الأمر التالي ونشر الناتج؟

cd /var/discourse
./launcher enter app
rails c

TranslationOverride.where("translation_key LIKE '%off_%'").pluck(:locale, :translation_key, :value)
إعجابَين (2)

شكرًا لدعمك. قمت بتشغيل هذا الأمر وحصلت على هذه المخرجات:

[1] pry(main)> TranslationOverride.where("translation_key LIKE '%off_%'").pluck(:locale, :translation_key, :value)
=> [["fa_IR", "post_action_types.off_topic.title", "لا علاقة له بموضوع المحادثة أو التصنيف المختار"],
 ["fa_IR", "js.post.actions.undo.off_topic", "إزالة العلم"],
 ["fa_IR", "js.post.actions.by_others.off_topic.one", "أبلغ {{count}} مستخدم عن هذا العنصر على أنه خارج نطاق النقاش"],
 ["fa_IR", "post_action_types.off_topic.long_form", "وضع علم على هذا الموضوع باعتباره خارج نطاق النقاش"],
 ["fa_IR", "js.post.actions.people.off_topic", "تم وضع علم عليه باعتباره خارج نطاق محادثة"],
 ["fa_IR", "js.post.actions.by_you.off_topic", "لقد أبلغت عن هذه المشاركة للمدراء لفحص موضوعيتها."],
 ["fa_IR", "js.composer.drafts_offline", "مسودة غير متصلة"],
 ["fa_IR", "js.flagging.official_warning", "إرسال تحذير رسمي"],
 ["fa_IR", "js.flagging.formatted_name.off_topic", "لا علاقة له بموضوع المحادثة أو التصنيف المختار"],
 ["fa_IR", "post_action_types.off_topic.short_description", "لا علاقة له بموضوع المحادثة أو التصنيف المختار"],
 ["fa_IR", "post_action_types.off_topic.description", "لا توجد مشكلة في هذه المشاركة، لكنها لا ترتبط بموضوع المحادثة أو التصنيف المحدد، ومن الأفضل نقلها إلى محادثة أخرى أو وضعها في التصنيف الصحيح."]]
[2] pry(main)>
إعجابَين (2)

شكرًا لك! ساعد ذلك كثيرًا. تم إصلاح الخطأ في FIX: An overridden text of a non-existent plural key resulted in error · discourse/discourse@d516e49 · GitHub

3 إعجابات