Erreur de serveur interne lors de la prévisualisation des e-mails de résumé

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 « J'aime »

2 publications ont été divisées dans un nouveau sujet : Visualiser les modèles d’e-mails dans le compositeur wysiwyg provoque une erreur

oui je vois, concernant le premier problème (Erreur interne du serveur), pouvez-vous essayer de votre côté ?

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

Cela fonctionnait bien pour moi. Qu’avez-vous entré dans « Dernier utilisateur vu », le champ où vous entrez la date ?

Rien, c’est par défaut : 25-08-23

Pourriez-vous s’il vous plaît partager une capture d’écran de votre côté ?

1 « J'aime »

J’ai pu reproduire le bug après avoir changé la langue de mon interface en arabe. L’aperçu du résumé d’activité fonctionne correctement en allemand ou en anglais (avec des chiffres ASCII), mais échoue avec des chiffres arabes.

Étapes pour reproduire :

  1. Changez la langue de votre interface en arabe
  2. Naviguez vers /admin/email/preview-digest
  3. Sélectionnez une date dans le sélecteur de date et actualisez
    • Résultat attendu : Vous voyez le résumé comme vous le verriez lorsque votre interface est en anglais
    • Résultat actuel : Pas de résumé, juste un chargement infini dans l’interface, une erreur 500 dans la console du navigateur, une entrée dans /logs
  4. Rechargez la page pour arrêter le chargement
  5. Entrez une adresse e-mail et cliquez sur « envoyer »
    • Résultat attendu : Le résumé est envoyé comme il le serait lorsque votre interface est en anglais
    • Résultat actuel : Pop-up avec une erreur de serveur interne, aucun e-mail n’est envoyé, une erreur 500 dans la console du navigateur, une entrée dans /logs
1 « J'aime »

Oui, ce problème ne s’est produit qu’en langue arabe. J’ai essayé de passer à l’anglais et cela fonctionne bien.

1 « J'aime »

Une idée pour corriger ça ? Y a-t-il un moyen d’envoyer une newsletter à tous les membres par e-mail concernant mon forum ? Comme le modèle dans les e-mails de résumé ?

Mettre un pr-welcome là-dessus, nous voulons probablement faire une conversion de date à partir de chiffres arabes pour que le reste du code ne casse pas.

2 « J'aime »

@xkhalid D’autres sélecteurs de date dans Discourse fonctionnent-ils correctement pour vous ?
Par exemple

  • le « insérer l’heure » du menu plus dans le compositeur fonctionne-t-il ?

  • est-il possible de sélectionner une période dans votre tableau de bord d’administration ?

  • est-il possible de filtrer les journaux d’actions du personnel ?

S’ils fonctionnent, ils pourraient servir de modèle pour modifier le DatePicker dans le résumé de l’activité.

Non


Non


Non

1 « J'aime »

Alors, je ne suis pas sûr que cela ait un sens de corriger la période de temps dans le résumé d’activité individuellement, ce qui est quelque chose que j’aurais peut-être pu faire.
Pour moi, cela ressemble à un problème fondamental qui nécessite une solution générale pour toutes les entrées de date.

1 « J'aime »

Je regarde ceci, je pense avoir un code fonctionnel pour la deuxième instance (éditeur riche) et pour la première, je pense que nous pouvons créer un middleware qui transforme les paramètres liés à la date locale.

Je commite mes changements dans ce dépôt de branche : GitHub - ghassanmas/discourse at local-date-fix-ar

1 « J'aime »

Merci @ghassan pour votre contribution.

Je pense essayer cela sur mon propre forum, mais il est préférable de le tester d’abord dans un environnement de staging.

Oui, ce n’est toujours pas prêt, j’ai trouvé un autre cas limite pour les nombres persans/ourdous.

Je pense également qu’il pourrait y avoir une solution plus simple telle que les nombres/dates soient enregistrés et transférés au format ASCII et uniquement localisés au niveau de la vue.

Cela devrait fonctionner en supposant que momentjs ou moment-timezone soit toujours conscient de la bonne locale.

Concernant l’image que vous avez téléchargée. Êtes-vous d’accord pour que la date soit tournée `٢٥-٠٨-٢٠٢٤` ?

Si les nombres sont inversés, ce serait très déroutant pour les utilisateurs arabes, car en arabe, nous commençons naturellement de gauche à droite par jour → mois → année.

La façon dont la date est affichée en arabe de notre côté est correcte, comme le montre la capture d’écran.

Cela dit, j’aime beaucoup votre idée : la meilleure solution serait en effet de stocker les nombres en anglais (ASCII) et de ne les localiser qu’au niveau de la vue en fonction de la langue. C’est une excellente approche.

1 « J'aime »

Intéressant, je suis un locuteur natif de l’arabe, mais je penserais dans l’autre sens.

@xkhalid voici le correctif pour la deuxième approche GitHub - ghassanmas/discourse at local-date-fix-improvment

Pouvez-vous confirmer de votre côté que cela résout les deux cas ?

1 « J'aime »

@ghassan Malheureusement, je n’ai pas d’environnement de test séparé; je n’ai que le serveur de production avec lequel travailler :frowning:

J’ai testé en local sur mon environnement de développement.

Voici la PR fix: when date locale isnt ascii by ghassanmas · Pull Request #34914 · discourse/discourse · GitHub

Il reste encore quelques tests à corriger (car j’ai aussi ajouté des améliorations pour que l’éditeur riche affiche les dates locales), et il faudra probablement en ajouter d’autres.

Il serait préférable d’avoir un :+1: concernant l’orientation générale avant de me consacrer à la correction/l’ajout des tests.

1 « J'aime »