Interner Serverfehler beim Vorschauen von Digest-E-Mails

Hello,

I’m on Discourse 3.6.0.beta1-dev and facing an issue when trying to preview the digest email from the admin panel:
/admin/email/preview-digest

Problem description

  • When I click to send the digest, I get an Internal Server Error.
  • The email is not sent, and the error message appears as shown in the screenshots.

Screenshots


Error details

Message

ArgumentError (comparison of String with ActiveSupport::TimeWithZone failed)
app/controllers/list_controller.rb:525:in `>'
app/controllers/list_controller.rb:525:in `best_periods_for'
app/controllers/list_controller.rb:512:in `best_period_with_topics_for'
app/controllers/list_controller.rb:504:in `best_period_for'
app/models/topic.rb:560:in `for_digest'
app/mailers/user_notifications.rb:246:in `digest'
app/controllers/admin/email_controller.rb:49:in `respond_to?'
app/controllers/admin/email_controller.rb:49:in `send_digest'
app/controllers/application_controller.rb:429:in `block in with_resolved_locale'
app/controllers/application_controller.rb:429:in `with_resolved_locale'
lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
lib/middleware/crawler_hooks.rb:11:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:415:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
lib/middleware/default_headers.rb:13:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
lib/middleware/processing_request.rb:12:in `call'
lib/middleware/request_tracker.rb:410:in `call'

Backtrace

app/controllers/list_controller.rb:525:in `>'
app/controllers/list_controller.rb:525:in `best_periods_for'
app/controllers/list_controller.rb:512:in `best_period_with_topics_for'
app/controllers/list_controller.rb:504:in `best_period_for'
app/models/topic.rb:560:in `for_digest'
app/mailers/user_notifications.rb:246:in `digest'
actionpack (8.0.2.1) lib/abstract_controller/base.rb:226:in `process_action'
actionpack (8.0.2.1) lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport (8.0.2.1) lib/active_support/callbacks.rb:100:in `run_callbacks'
actionpack (8.0.2.1) lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack (8.0.2.1) lib/abstract_controller/base.rb:163:in `process'
actionmailer (8.0.2.1) lib/action_mailer/rescuable.rb:29:in `block in process'
actionmailer (8.0.2.1) lib/action_mailer/rescuable.rb:21:in `handle_exceptions'
actionmailer (8.0.2.1) lib/action_mailer/rescuable.rb:28:in `process'
actionview (8.0.2.1) lib/action_view/rendering.rb:40:in `process'
actionmailer (8.0.2.1) lib/action_mailer/base.rb:652:in `block in process'
activesupport (8.0.2.1) lib/active_support/notifications.rb:212:in `instrument'
actionmailer (8.0.2.1) lib/action_mailer/base.rb:651:in `process'
actionmailer (8.0.2.1) lib/action_mailer/message_delivery.rb:136:in `block in processed_mailer'
<internal:kernel>:90:in `tap'
actionmailer (8.0.2.1) lib/action_mailer/message_delivery.rb:135:in `processed_mailer'
actionmailer (8.0.2.1) lib/action_mailer/message_delivery.rb:32:in `__getobj__'
/usr/local/lib/ruby/3.3.0/delegate.rb:101:in `respond_to_missing?'
app/controllers/admin/email_controller.rb:49:in `respond_to?'
app/controllers/admin/email_controller.rb:49:in `send_digest'
actionpack (8.0.2.1) lib/action_controller/metal/basic_implicit_render.rb:8:in `send_action'
actionpack (8.0.2.1) lib/abstract_controller/base.rb:226:in `process_action'
actionpack (8.0.2.1) lib/action_controller/metal/rendering.rb:193:in `process_action'
actionpack (8.0.2.1) lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport (8.0.2.1) lib/active_support/callbacks.rb:120:in `block in run_callbacks'
app/controllers/application_controller.rb:429:in `block in with_resolved_locale'
i18n (1.14.7) lib/i18n.rb:353:in `with_locale'
app/controllers/application_controller.rb:429:in `with_resolved_locale'
activesupport (8.0.2.1) lib/active_support/callbacks.rb:129:in `block in run_callbacks'
activesupport (8.0.2.1) lib/active_support/callbacks.rb:140:in `run_callbacks'
actionpack (8.0.2.1) lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack (8.0.2.1) lib/action_controller/metal/rescue.rb:27:in `process_action'
actionpack (8.0.2.1) lib/action_controller/metal/instrumentation.rb:76:in `block in process_action'
activesupport (8.0.2.1) lib/active_support/notifications.rb:210:in `block in instrument'
activesupport (8.0.2.1) lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport (8.0.2.1) lib/active_support/notifications.rb:210:in `instrument'
actionpack (8.0.2.1) lib/action_controller/metal/instrumentation.rb:75:in `process_action'
actionpack (8.0.2.1) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord (8.0.2.1) lib/active_record/railties/controller_runtime.rb:39:in `process_action'
actionpack (8.0.2.1) lib/abstract_controller/base.rb:163:in `process'
actionview (8.0.2.1) lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler (4.0.1) lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method'
actionpack (8.0.2.1) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (8.0.2.1) lib/action_controller/metal.rb:335:in `dispatch'
actionpack (8.0.2.1) lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
actionpack (8.0.2.1) lib/action_dispatch/routing/route_set.rb:50:in `serve'
actionpack (8.0.2.1) lib/action_dispatch/routing/mapper.rb:32:in `block in <class:Constraints>'
actionpack (8.0.2.1) lib/action_dispatch/routing/mapper.rb:62:in `serve'
actionpack (8.0.2.1) lib/action_dispatch/journey/router.rb:53:in `block in serve'
actionpack (8.0.2.1) lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
actionpack (8.0.2.1) lib/action_dispatch/journey/router.rb:126:in `each'
actionpack (8.0.2.1) lib/action_dispatch/journey/router.rb:126:in `find_routes'
actionpack (8.0.2.1) lib/action_dispatch/journey/router.rb:34:in `serve'
actionpack (8.0.2.1) lib/action_dispatch/routing/route_set.rb:908:in `call'
lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
lib/middleware/crawler_hooks.rb:11:in `call'
rack (2.2.17) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.17) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.17) lib/rack/head.rb:12:in `call'
actionpack (8.0.2.1) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
lib/content_security_policy/middleware.rb:12:in `call'
lib/middleware/anonymous_cache.rb:415:in `call'
lib/middleware/csp_script_nonce_injector.rb:12:in `call'
config/initializers/008-rack-cors.rb:14:in `call'
rack (2.2.17) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.17) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/cookies.rb:706:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
activesupport (8.0.2.1) lib/active_support/callbacks.rb:100:in `run_callbacks'
actionpack (8.0.2.1) lib/action_dispatch/middleware/callbacks.rb:30:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
logster (2.20.1) lib/logster/middleware/reporter.rb:40:in `call'
lib/middleware/default_headers.rb:13:in `call'
railties (8.0.2.1) lib/rails/rack/logger.rb:41:in `call_app'
railties (8.0.2.1) lib/rails/rack/logger.rb:29:in `call'
config/initializers/100-quiet_logger.rb:20:in `call'
config/initializers/100-silence_logger.rb:29:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/request_id.rb:34:in `call'
lib/middleware/enforce_hostname.rb:23:in `call'
rack (2.2.17) lib/rack/method_override.rb:24:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/executor.rb:16:in `call'
rack (2.2.17) lib/rack/sendfile.rb:110:in `call'
rack-mini-profiler (4.0.1) lib/mini_profiler.rb:191:in `call'
lib/middleware/processing_request.rb:12:in `call'
message_bus (4.4.1) lib/message_bus/rack/middleware.rb:60:in `call'
lib/middleware/request_tracker.rb:410:in `call'
actionpack (8.0.2.1) lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
railties (8.0.2.1) lib/rails/engine.rb:535:in `call'
railties (8.0.2.1) lib/rails/railtie.rb:226:in `public_send'
railties (8.0.2.1) lib/rails/railtie.rb:226:in `method_missing'
rack (2.2.17) lib/rack/urlmap.rb:74:in `block in call'
rack (2.2.17) lib/rack/urlmap.rb:58:in `each'
rack (2.2.17) lib/rack/urlmap.rb:58:in `call'
unicorn (6.1.0) lib/unicorn/http_server.rb:634:in `process_client'
unicorn (6.1.0) lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn (6.1.0) lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn (6.1.0) lib/unicorn/http_server.rb:143:in `start'
unicorn (6.1.0) bin/unicorn:128:in `<top (required)>'
vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'

Warning details

Message

Failed to handle exception in exception app middleware : ArgumentError : comparison of String with ActiveSupport::TimeWithZone failed

Backtrace

/var/www/discourse/app/controllers/list_controller.rb:525:in `>'
/var/www/discourse/app/controllers/list_controller.rb:525:in `best_periods_for'
/var/www/discourse/app/controllers/list_controller.rb:512:in `best_period_with_topics_for'
/var/www/discourse/app/controllers/list_controller.rb:504:in `best_period_for'
/var/www/discourse/app/models/topic.rb:560:in `for_digest'
/var/www/discourse/app/mailers/user_notifications.rb:246:in `digest'
actionpack-8.0.2.1/lib/abstract_controller/base.rb:226:in `process_action'
actionpack-8.0.2.1/lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport-8.0.2.1/lib/active_support/callbacks.rb:100:in `run_callbacks'
actionpack-8.0.2.1/lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack-8.0.2.1/lib/abstract_controller/base.rb:163:in `process'
actionmailer-8.0.2.1/lib/action_mailer/rescuable.rb:29:in `block in process'
actionmailer-8.0.2.1/lib/action_mailer/rescuable.rb:21:in `handle_exceptions'
actionmailer-8.0.2.1/lib/action_mailer/rescuable.rb:28:in `process'
actionview-8.0.2.1/lib/action_view/rendering.rb:40:in `process'
actionmailer-8.0.2.1/lib/action_mailer/base.rb:652:in `block in process'
activesupport-8.0.2.1/lib/active_support/notifications.rb:212:in `instrument'
actionmailer-8.0.2.1/lib/action_mailer/base.rb:651:in `process'
actionmailer-8.0.2.1/lib/action_mailer/message_delivery.rb:136:in `block in processed_mailer'
<internal:kernel>:90:in `tap'
actionmailer-8.0.2.1/lib/action_mailer/message_delivery.rb:135:in `processed_mailer'
actionmailer-8.0.2.1/lib/action_mailer/message_delivery.rb:32:in `__getobj__'
/usr/local/lib/ruby/3.3.0/delegate.rb:101:in `respond_to_missing?'
/var/www/discourse/app/controllers/admin/email_controller.rb:49:in `respond_to?'
/var/www/discourse/app/controllers/admin/email_controller.rb:49:in `send_digest'
actionpack-8.0.2.1/lib/action_controller/metal/basic_implicit_render.rb:8:in `send_action'
actionpack-8.0.2.1/lib/abstract_controller/base.rb:226:in `process_action'
actionpack-8.0.2.1/lib/action_controller/metal/rendering.rb:193:in `process_action'
actionpack-8.0.2.1/lib/abstract_controller/callbacks.rb:261:in `block in process_action'
activesupport-8.0.2.1/lib/active_support/callbacks.rb:120:in `block in run_callbacks'
/var/www/discourse/app/controllers/application_controller.rb:429:in `block in with_resolved_locale'
i18n-1.14.7/lib/i18n.rb:353:in `with_locale'
/var/www/discourse/app/controllers/application_controller.rb:429:in `with_resolved_locale'
activesupport-8.0.2.1/lib/active_support/callbacks.rb:129:in `block in run_callbacks'
activesupport-8.0.2.1/lib/active_support/callbacks.rb:140:in `run_callbacks'
actionpack-8.0.2.1/lib/abstract_controller/callbacks.rb:260:in `process_action'
actionpack-8.0.2.1/lib/action_controller/metal/rescue.rb:27:in `process_action'
actionpack-8.0.2.1/lib/action_controller/metal/instrumentation.rb:76:in `block in process_action'
activesupport-8.0.2.1/lib/active_support/notifications.rb:210:in `block in instrument'
activesupport-8.0.2.1/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
activesupport-8.0.2.1/lib/active_support/notifications.rb:210:in `instrument'
actionpack-8.0.2.1/lib/action_controller/metal/instrumentation.rb:75:in `process_action'
actionpack-8.0.2.1/lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
activerecord-8.0.2.1/lib/active_record/railties/controller_runtime.rb:39:in `process_action'
actionpack-8.0.2.1/lib/abstract_controller/base.rb:163:in `process'
actionview-8.0.2.1/lib/action_view/rendering.rb:40:in `process'
rack-mini-profiler-4.0.1/lib/mini_profiler/profiling_methods.rb:90:in `block in profile_method'
actionpack-8.0.2.1/lib/action_controller/metal.rb:252:in `dispatch'
actionpack-8.0.2.1/lib/action_controller/metal.rb:335:in `dispatch'
actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:67:in `dispatch'
actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:50:in `serve'
actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:32:in `block in <class:Constraints>'
actionpack-8.0.2.1/lib/action_dispatch/routing/mapper.rb:62:in `serve'
actionpack-8.0.2.1/lib/action_dispatch/journey/router.rb:53:in `block in serve'
actionpack-8.0.2.1/lib/action_dispatch/journey/router.rb:133:in `block in find_routes'
actionpack-8.0.2.1/lib/action_dispatch/journey/router.rb:126:in `each'
actionpack-8.0.2.1/lib/action_dispatch/journey/router.rb:126:in `find_routes'
actionpack-8.0.2.1/lib/action_dispatch/journey/router.rb:34:in `serve'
actionpack-8.0.2.1/lib/action_dispatch/routing/route_set.rb:908:in `call'
/var/www/discourse/lib/middleware/omniauth_bypass_middleware.rb:35:in `call'
/var/www/discourse/lib/middleware/crawler_hooks.rb:11:in `call'
rack-2.2.17/lib/rack/tempfile_reaper.rb:15:in `call'
rack-2.2.17/lib/rack/conditional_get.rb:40:in `call'
rack-2.2.17/lib/rack/head.rb:12:in `call'
actionpack-8.0.2.1/lib/action_dispatch/http/permissions_policy.rb:38:in `call'
/var/www/discourse/lib/content_security_policy/middleware.rb:12:in `call'
/var/www/discourse/lib/middleware/anonymous_cache.rb:415:in `call'
/var/www/discourse/lib/middleware/csp_script_nonce_injector.rb:12:in `call'
/var/www/discourse/config/initializers/008-rack-cors.rb:14:in `call'
rack-2.2.17/lib/rack/session/abstract/id.rb:266:in `context'
rack-2.2.17/lib/rack/session/abstract/id.rb:260:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/cookies.rb:706:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/callbacks.rb:31:in `block in call'
activesupport-8.0.2.1/lib/active_support/callbacks.rb:100:in `run_callbacks'
actionpack-8.0.2.1/lib/action_dispatch/middleware/callbacks.rb:30:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/debug_exceptions.rb:31:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/show_exceptions.rb:32:in `call'
logster-2.20.1/lib/logster/middleware/reporter.rb:40:in `call'
/var/www/discourse/lib/middleware/default_headers.rb:13:in `call'
railties-8.0.2.1/lib/rails/rack/logger.rb:41:in `call_app'
railties-8.0.2.1/lib/rails/rack/logger.rb:29:in `call'
/var/www/discourse/config/initializers/100-quiet_logger.rb:20:in `call'
/var/www/discourse/config/initializers/100-silence_logger.rb:29:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/request_id.rb:34:in `call'
/var/www/discourse/lib/middleware/enforce_hostname.rb:23:in `call'
rack-2.2.17/lib/rack/method_override.rb:24:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/executor.rb:16:in `call'
rack-2.2.17/lib/rack/sendfile.rb:110:in `call'
rack-mini-profiler-4.0.1/lib/mini_profiler.rb:191:in `call'
/var/www/discourse/lib/middleware/processing_request.rb:12:in `call'
message_bus-4.4.1/lib/message_bus/rack/middleware.rb:60:in `call'
/var/www/discourse/lib/middleware/request_tracker.rb:410:in `call'
actionpack-8.0.2.1/lib/action_dispatch/middleware/remote_ip.rb:96:in `call'
railties-8.0.2.1/lib/rails/engine.rb:535:in `call'
railties-8.0.2.1/lib/rails/railtie.rb:226:in `public_send'
railties-8.0.2.1/lib/rails/railtie.rb:226:in `method_missing'
rack-2.2.17/lib/rack/urlmap.rb:74:in `block in call'
rack-2.2.17/lib/rack/urlmap.rb:58:in `each'
rack-2.2.17/lib/rack/urlmap.rb:58:in `call'
unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.3.0/bin/unicorn:25:in `<main>'
1 „Gefällt mir“

2 Beiträge wurden in ein neues Thema aufgeteilt: Anzeigen von E-Mail-Vorlagen im WYSIWYG-Editor verursacht einen Fehler

Ja, ich verstehe. Bezüglich des ersten Problems (Internal Server Error), können Sie es bitte von Ihrer Seite aus versuchen?

https://xxx.xxx/admin/email/preview-digest

Bei mir hat es funktioniert. Was haben Sie bei „Zuletzt gesehener Benutzer“, dem Feld, in das Sie das Datum eingeben, eingetragen?

Nichts, es ist Standard: 23-08-25

Könnten Sie bitte einen Screenshot von Ihrer Seite teilen?

1 „Gefällt mir“

Ich konnte den Fehler reproduzieren, nachdem ich meine Oberflächensprache auf Arabisch umgestellt hatte. Die Vorschau der Aktivitätszusammenfassung funktioniert korrekt auf Deutsch oder Englisch (mit ASCII-Zahlen), schlägt jedoch mit arabischen Ziffern fehl.

Schritte zur Reproduktion:

  1. Ändern Sie Ihre Oberflächensprache auf Arabisch.
  2. Navigieren Sie zu /admin/email/preview-digest.
  3. Wählen Sie ein Datum im Datumsauswahlfeld aus und aktualisieren Sie.
    • Erwartetes Ergebnis: Sie sehen die Zusammenfassung, wie Sie sie sehen würden, wenn Ihre Oberfläche auf Englisch wäre.
    • Tatsächliches Ergebnis: Keine Zusammenfassung, nur endloses Drehen in der Oberfläche, Fehler 500 in der Browserkonsole, Eintrag in /logs.
  4. Laden Sie die Seite neu, um den Spinner zu stoppen.
  5. Geben Sie eine E-Mail-Adresse ein und klicken Sie auf „Senden“.
    • Erwartetes Ergebnis: Die Zusammenfassung wird gesendet, wie sie gesendet würde, wenn Ihre Oberfläche auf Englisch wäre.
    • Tatsächliches Ergebnis: Popup mit internem Serverfehler, keine E-Mail wird gesendet, Fehler 500 in der Browserkonsole, Eintrag in /logs.
1 „Gefällt mir“

Ja, dieses Problem trat nur in arabischer Sprache auf. Ich habe versucht, auf Englisch umzuschalten, und es funktioniert gut.

1 „Gefällt mir“

Gibt es einen Plan, es zu beheben? Gibt es eine Möglichkeit, allen Mitgliedern per E-Mail einen Newsletter über mein Forum zu senden? Ähnlich wie die Vorlage in den Digest-E-Mails?

Wir setzen hierfür ein pr-welcome, wir wollen wahrscheinlich eine Datumsangabe von arabischen Ziffern konvertieren, damit der Rest des Codes nicht fehlschlägt.

2 „Gefällt mir“

@xkhalid Funktionieren andere Datumsauswähler in Discourse bei Ihnen?
Zum Beispiel:

  • Funktioniert „Zeit einfügen“ aus dem Menü „Mehr“ im Composer?

  • Funktioniert die Auswahl eines Zeitraums in Ihrem Admin-Dashboard?

  • Funktioniert die Filterung der Protokolle der Mitarbeiteraktionen?

Wenn sie funktionieren, könnten sie als Vorlage für die Änderung des DatePicker in der Aktivitätszusammenfassung verwendet werden.

Nein


Nein


Nein

1 „Gefällt mir“

Dann bin ich mir nicht sicher, ob es sinnvoll ist, den Zeitraum in der Aktivitätszusammenfassung einzeln zu korrigieren, was ich vielleicht hätte tun können.
Für mich sieht das wie ein grundlegendes Problem aus, das eine allgemeine Lösung für alle Datumsangaben erfordert.

1 „Gefällt mir“

Ich schaue mir das an. Ich glaube, ich habe einen funktionierenden Code für die zweite Instanz (Rich Editor) und für die erste denke ich, wir könnten vielleicht eine Middleware erstellen, die Parameter transformiert, die sich auf lokale Daten beziehen.

Ich committe meine Änderungen in diesem Branch-Repository: GitHub - ghassanmas/discourse at local-date-fix-ar

1 „Gefällt mir“

Vielen Dank @ghassan für deinen Beitrag.

Ich überlege, dies auf meinem eigenen Forum auszuprobieren, aber es ist besser, es zuerst in einer Staging-Umgebung zu testen.

Ja, es ist immer noch nicht fertig, ich habe noch einen weiteren Sonderfall für persische/Urdu-Zahlen gefunden.

Außerdem denke ich, dass es eine einfachere Lösung geben könnte, bei der Zahlen/Daten im ASCII-Format gespeichert und übertragen werden und nur in der Ansichtsschicht lokalisiert werden.

Dies sollte funktionieren, vorausgesetzt, momentjs oder moment-timezone sind sich immer der korrekten Locale bewusst.

Bezüglich des von Ihnen hochgeladenen Bildes. Stimmen Sie zu, dass das Datum gedreht werden sollte `٢٥-٠٨-٢٠٢٤`. ?

Wenn die Zahlen umgekehrt werden, wäre das für arabische Benutzer sehr verwirrend, da wir im Arabischen natürlich von links nach rechts mit Tag → Monat → Jahr beginnen.

Die Art und Weise, wie das Datum auf unserer Seite auf Arabisch angezeigt wird, ist korrekt, wie im Screenshot gezeigt.

Das gesagt, gefällt mir Ihre Idee sehr gut: Die beste Lösung wäre in der Tat, die Zahlen auf Englisch (ASCII) zu speichern und sie nur in der Ansichtsebene je nach Sprache zu lokalisieren. Das ist ein ausgezeichneter Ansatz.

1 „Gefällt mir“

Interessant, ich bin arabischer Muttersprachler, würde aber anders denken.

@xkhalid hier ist ein Patch für den zweiten Ansatz GitHub - ghassanmas/discourse at local-date-fix-improvment

Können Sie von Ihrer Seite bestätigen, dass die beiden Fälle damit behoben sind?

1 „Gefällt mir“

@ghassan Leider habe ich keine separate Testumgebung; ich habe nur den Produktionsserver, mit dem ich arbeiten kann :frowning:

Ich habe auf lokaler Entwicklungsumgebung getestet.

Hier ist der PR fix: when date locale isnt ascii by ghassanmas · Pull Request #34914 · discourse/discourse · GitHub

Es müssen noch einige Tests behoben werden (da ich auch Verbesserungen hinzugefügt habe, damit der Rich-Editor lokale Daten rendert), wahrscheinlich müssen weitere Tests hinzugefügt werden.

Es wäre besser, eine :+1: zur Richtung zu bekommen, bevor ich mich dem Beheben/Hinzufügen der Tests widme.

1 „Gefällt mir“