Não é possível personalizar alguns textos do site

Estou tentando modificar certas strings na página de preferências do usuário. Naveguei para Admin -\u003e Textos do Site e procurei pelas chaves relevantes. No entanto, não consegui personalizar o texto específico que estava procurando, pois ele me informou que nenhum texto foi encontrado.

Tenho certeza de que a chave é válida, pois ela está definida aqui:

Em seguida, mudei o idioma de destino para inglês, mas ainda assim não obtive resultados para user.username.short_instructions. Além disso, tentei procurar outras strings, como user.username.title, user.preferences.title e filters.latest.title, mas sem sucesso.

2 curtidas

Muito estranho, consigo exibir a chave

Se você clicar com o botão direito e abrir o inspetor do navegador, há algum erro na aba do console?

1 curtida

Parece que não há erros relacionados e, com base nos resultados da solicitação, pode ser um problema de backend.

Embora eu não acredite que os plugins que instalei tenham modificado essa área específica, tentarei remover todos os plugins não oficiais mais tarde para ver se isso resolve o problema.

1 curtida

Você pode desativar temporariamente as personalizações usando o modo de segurança e ver se isso funciona.

1 curtida

Tenho algumas atualizações sobre este assunto. Agora posso confirmar definitivamente que o problema está no backend. Ao examinar o código, notei uma linha específica:

Para minha surpresa, executar I18n.exists?("js.user.username.short_instructions", :en) na minha instância retorna false.

Removi manualmente esta linha de código e agora consigo pesquisar por user.username.short_instructions

Não tenho certeza por que I18n.exists?("js.user.username.short_instructions", :en) está retornando false. Posso investigar mais para determinar se o problema é específico da minha instância ou um problema mais geral com o Discourse.

Parece um problema geral na sua instância do Discourse.

sam@arch discourse % bin/rails c
Loading development environment (Rails 8.0.4)
[1] pry(main)> I18n.exists?("js.user.username.short_instructions", :en)
=> true

Particularmente algo em torno da compilação. Durante a compilação, analisamos todas essas coisas e as colocamos em tabelas, de alguma forma isso ainda não aconteceu na sua instância.

Recomendaria uma reconstrução do console.

@sam, obrigado pela sua resposta. Implantei três instâncias do Discourse usando métodos diferentes e todas apresentam o mesmo problema, o que me leva a acreditar que não é um problema de instalação.

Ao reexaminar meus plugins, descobri que um deles criou um arquivo de local (plugins/XXXX/config/locales/client.en.yml) com o seguinte conteúdo:

en:
   js:

Excluir este arquivo resolveu o problema. Após uma breve investigação sobre a implementação do I18n, descobri que deep_merge é usado para mesclar traduções durante o carregamento:

    # File activesupport/lib/active_support/vendor/i18n-0.4.1/i18n/backend/simple.rb, line 31
31:         def store_translations(locale, data, options = {})
32:           locale = locale.to_sym
33:           translations[locale] ||= {}
34:           data = data.deep_symbolize_keys
35:           translations[locale].deep_merge!(data)
36:         end

O YAML acima é analisado como:

{"en": {"js": null}}

Isso resulta na exclusão de todo o conteúdo sob a chave en.js após a mesclagem. Como desenvolvedor de plugins, entendo que esse problema decorre de um erro meu de codificação e sou totalmente responsável por ele. No entanto, acredito que o Discourse poderia se beneficiar de verificações adicionais para alertar contra tais ocorrências, especialmente considerando que o Discourse já possui um design para inspecionar arquivos de local, como visto aqui.

4 curtidas

Fico feliz que você tenha encontrado!

Vou notificar a equipe de desenvolvimento xp para que eles estejam cientes.

4 curtidas

Ótima observação, obrigado por nos atualizar sobre a solução @pangbo.

Nós definitivamente poderíamos adicionar uma verificação aqui, embora, se bem me lembro, este verificador é usado apenas durante os testes do RSpec. Isso teria ajudado no seu caso?

Definitivamente aberto a ter uma verificação em tempo de execução para este caso de null, se pudermos encontrar um bom lugar para colocá-lo.

2 curtidas

Você está correto. Fiz uma suposição injustificada de que essas verificações seriam executadas em tempo de execução. Ao pesquisar no repositório do GitHub, parece que essas verificações são invocadas exclusivamente em uma tarefa rake: discourse/lib/tasks/i18n.rake at main · discourse/discourse · GitHub

Adicionar verificações aqui não teria identificado preventivamente o problema que encontrei. Talvez a solução mais direta seja alertar os desenvolvedores contra essa prática na documentação :innocent:

2 curtidas

O que faremos com este tópico? Devemos movê-lo para Dev, já que parece ser um guia para desenvolvedores?