Error al cambiar los textos del sitio

Hola,

Hoy estoy intentando cambiar parte del texto del sitio en el panel de administración. Al hacer clic en “Guardar cambios”, obtengo un error de servidor 500.

A partir de entonces, cada vez que busco un ID de texto o el cuerpo del texto, obtengo un error de servidor 500.

Creo que el texto traducido contiene la palabra clave “{{count}}”.

Mi Discourse está actualizado y a continuación se muestra la información del registro:

Entorno:

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

Información:

TypeError (no se puede convertir implícitamente un Símbolo en un Entero)
/var/www/discourse/app/controllers/admin/site_texts_controller.rb:172:in `[]'

Rastreo:

/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 Me gusta

No logro reproducirlo aquí; podría tratarse de una traducción incorrecta. ¿Cuál es tu configuración regional?

1 me gusta

Mi idioma de Discourse es fa_IR. Esto ocurre después de intentar cambiar el texto.
A veces, cambiar el texto genera errores, especialmente cuando hay variables en el texto.

Creo que algunas variables han cambiado con el tiempo, pero aún se utilizan en traducciones antiguas. Por ejemplo: {site_title} y {site_name}, o {base_url} y {basePath}, o {base_path}.

Podría ser útil mostrar el texto en inglés como explicación para la traducción, debajo del cuadro de edición del texto, cuando Discourse esté utilizando una localización diferente.

2 Me gusta

Sí, supongo que algo está roto en la traducción. ¿Podrías informarme una vez que cambies al inglés? ¿Puedes ayudar a reparar las cadenas en Transifex?

3 Me gusta

Honestamente, no puedo usar el inglés porque mi Discourse está en vivo y muchos usuarios lo utilizan.

Sí, estoy encantado de ayudar a corregir la traducción al persa, ya que hay muchos errores en este idioma. Editamos los textos de nuestro sitio de Discourse y los personalizamos. Con el tiempo, puedo corregir algunos de los errores comunes que veo en mi instancia de Discourse directamente en Transifex.


La página de personalización de textos en Discourse tiene un diseño muy sencillo; no estaría mal dedicar un poco más de tiempo a esta gran función.

Cambios como:

  • Mostrar el texto predeterminado en inglés para cada elemento al personalizar los textos
  • Mostrar la sugerencia de la comunidad en el idioma seleccionado para cada elemento al personalizar los textos
  • Sugerir una mejor traducción a la comunidad directamente en el lugar
  • Posibilidad de cambiar las traducciones en los textos almacenados en la base de datos, como los mensajes del sistema
  • Mostrar una lista de las variables permitidas que se pueden usar en el texto al personalizar los textos
2 Me gusta

No puedo reproducir una búsqueda de off_ que rompa Discourse con fa_IR establecido. ¿Estás seguro de que estás en la última versión?

@gerhard ¿es esto un error en fix_plural_keys? ¿Debería ser más conservador? Supongo que I18n.t(key, locale: :en) podría devolver teóricamente algo no plural aquí:

Como mínimo, si hacemos esto un poco más multilinea, podremos ver qué falló.

6 Me gusta

Mi instancia de Discourse está actualizada. Si necesitas un registro o informe específico para depurar, avísame y te lo enviaré. También podemos brindarte acceso remoto o privilegios administrativos para una investigación más profunda.

@nildarar Me gustaría averiguar qué está causando ese error. ¿Podrías ejecutar lo siguiente y compartir la salida?

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

TranslationOverride.where("translation_key LIKE '%off_%'").pluck(:locale, :translation_key, :value)
2 Me gusta

Gracias por tu ayuda. Ejecuté este comando y obtuve esta salida:

[1] pry(main) > TranslationOverride.where("translation_key LIKE '%off_%'").pluck(:locale, :translation_key, :value)
=> [["fa_IR", "post_action_types.off_topic.title", "No tiene relación con el tema del chat o la categoría seleccionada"],
 ["fa_IR", "js.post.actions.undo.off_topic", "Quitar bandera"],
 ["fa_IR", "js.post.actions.by_others.off_topic.one", "{{count}} usuario reportó este elemento como fuera de tema"],
 ["fa_IR", "post_action_types.off_topic.long_form", "Marcar este tema como fuera de tema"],
 ["fa_IR", "js.post.actions.people.off_topic", "Marcado como fuera de tema del chat"],
 ["fa_IR", "js.post.actions.by_you.off_topic", "Has reportado este mensaje a los administradores para revisión del tema."],
 ["fa_IR", "js.composer.drafts_offline", "Borrador sin conexión"],
 ["fa_IR", "js.flagging.official_warning", "Enviar advertencia oficial"],
 ["fa_IR", "js.flagging.formatted_name.off_topic", "No tiene relación con el tema del chat o la categoría seleccionada"],
 ["fa_IR", "post_action_types.off_topic.short_description", "No tiene relación con el tema del chat o la categoría seleccionada"],
 ["fa_IR", "post_action_types.off_topic.description", "Este mensaje no tiene problemas, pero no está relacionado con el tema del chat o la categoría seleccionada; sería mejor moverlo a otro chat o colocarlo en la categoría correcta."]]
[2] pry(main) >
2 Me gusta

¡Gracias! Eso ayudó mucho. El error se ha corregido en FIX: An overridden text of a non-existent plural key resulted in error · discourse/discourse@d516e49 · GitHub

3 Me gusta