Erreur lors de la modification des textes du site

Bonjour,

Aujourd’hui, j’essaie de modifier certains textes du site dans le panneau d’administration. Lorsque je clique sur « Enregistrer les modifications », j’obtiens une erreur de serveur 500.

Par la suite, à chaque fois que je recherche un identifiant de texte ou le corps du texte, je reçois également une erreur de serveur 500.

Je pense que le texte traduit contient le mot-clé “{{count}}”.

Mon Discourse est à jour. Voici les informations du journal :

Environnement :

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

Informations :

TypeError (conversion implicite de Symbol en Integer impossible)
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:172:in `[]'

Pile d’appels :

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

Je n’arrive pas à reproduire le problème ici ; il pourrait s’agir d’une traduction erronée. Quelle est votre langue régionale ?

1 « J'aime »

Ma langue Discourse est fa_IR. Cela se produit après que j’essaie de modifier le texte.
Parfois, la modification du texte entraîne des erreurs, en particulier lorsqu’il y a des variables dans le texte.

Je pense que certaines variables ont changé au fil du temps, mais elles sont toujours utilisées dans les anciennes traductions. Par exemple {site_title} et {site_name}, ou {base_url} et {basePath}, ou {base_path}.

Il ne serait peut-être pas mauvais d’afficher le texte en anglais à titre d’explication pour la traduction, sous la zone de modification du texte, lorsque Discourse utilise une autre langue.

2 « J'aime »

Oui, je pense que quelque chose est cassé dans la traduction. Peux-tu me tenir au courant une fois que tu passeras à l’anglais ? Peux-tu m’aider à corriger les chaînes dans Transifex ?

3 « J'aime »

Honnêtement, je ne peux pas utiliser l’anglais car mon instance Discourse est en ligne et de nombreux utilisateurs l’utilisent.

Oui, je suis ravi d’aider à corriger la traduction en persan, car il y a beaucoup d’erreurs dans cette langue. Nous modifions et personnalisons les textes de notre site Discourse. Je peux corriger certaines des erreurs courantes que je remarque dans mon instance Discourse au fil du temps dans Transifex.


La page de personnalisation des textes dans Discourse a une conception très simple. Ce ne serait pas une mauvaise idée de consacrer un peu plus de temps à cette excellente fonctionnalité.

Changements suggérés :

  • Afficher le texte anglais par défaut pour chaque élément lors de la personnalisation des textes
  • Afficher la suggestion de la communauté dans la langue sélectionnée pour chaque élément lors de la personnalisation des textes
  • Proposer une meilleure traduction à la communauté directement sur place
  • Possibilité de modifier les traductions dans les textes stockés en base de données, tels que les messages système
  • Afficher une liste des variables autorisées pouvant être utilisées dans le texte lors de la personnalisation des textes
2 « J'aime »

Je ne parviens pas à reproduire un problème de recherche pour off_ qui ferait planter Discourse avec fa_IR défini. Êtes-vous sûr d’utiliser la dernière version ?

@gerhard s’agit-il d’un bug dans fix_plural_keys ? Devrait-elle être plus prudente ? Je suppose que I18n.t(key, locale: :en) pourrait en théorie retourner une valeur non plurielle ici :

À tout le moins, si nous rendons cela un peu plus multiligne, nous pourrons voir ce qui a explosé.

6 « J'aime »

Mon instance Discourse est à jour. Si vous avez besoin d’un journal ou d’un rapport spécifique pour le débogage, je peux vous l’envoyer. Nous pouvons également vous accorder un accès distant ou des privilèges d’administration pour une investigation plus approfondie.

@nildarar Je voudrais comprendre ce qui cause cette erreur. Pourriez-vous s’il vous plaît exécuter la commande suivante et partager le résultat ?

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

TranslationOverride.where("translation_key LIKE '%off_%'").pluck(:locale, :translation_key, :value)
2 « J'aime »

Merci pour votre aide. J’ai exécuté cette commande et obtenu ce résultat :

[1] pry(main)> TranslationOverride.where("translation_key LIKE '%off_%'").pluck(:locale, :translation_key, :value)
=> [["fa_IR", "post_action_types.off_topic.title", "Aucun lien avec le sujet du chat ou la catégorie sélectionnée"],
 ["fa_IR", "js.post.actions.undo.off_topic", "Retirer le drapeau"],
 ["fa_IR", "js.post.actions.by_others.off_topic.one", "{{count}} utilisateur a signalé cet élément comme hors sujet"],
 ["fa_IR", "post_action_types.off_topic.long_form", "Signaler ce sujet comme hors sujet"],
 ["fa_IR", "js.post.actions.people.off_topic", "Signalé comme hors sujet du chat"],
 ["fa_IR", "js.post.actions.by_you.off_topic", "Vous avez signalé ce message aux administrateurs pour examen thématique."],
 ["fa_IR", "js.composer.drafts_offline", "Brouillon hors ligne"],
 ["fa_IR", "js.flagging.official_warning", "Envoyer un avertissement officiel"],
 ["fa_IR", "js.flagging.formatted_name.off_topic", "Aucun lien avec le sujet du chat ou la catégorie sélectionnée"],
 ["fa_IR", "post_action_types.off_topic.short_description", "Aucun lien avec le sujet du chat ou la catégorie sélectionnée"],
 ["fa_IR", "post_action_types.off_topic.description", "Ce message ne pose pas de problème, mais il n'est pas lié au sujet du chat ou à la catégorie sélectionnée. Il serait préférable de le déplacer vers un autre chat ou de le placer dans la bonne catégorie."]]
[2] pry(main)>
2 « J'aime »

Merci ! Cela a beaucoup aidé. L’erreur a été corrigée dans FIX: An overridden text of a non-existent plural key resulted in error · discourse/discourse@d516e49 · GitHub

3 « J'aime »