String de tradução do Bad MF em localizações de cliente hebraico causa erro fatal no site

Eu entraria no contêiner, instalaria o vim e repararia o locale.
Você poderia salvar o locale hebraico quebrado e copiar o inglês por cima dele…

root@carrie-app:/var/www# for i in `find . -name *.he.yml` ; do cp ${i/he.yml/en.yml} $i ; done

Ideia legal, mas não funcionou na prática. quando troquei minha localidade para HE novamente, recebo o erro. Acho que voltarei a iterar sobre os usuários para defini-los todos para inglês por enquanto.

Você reiniciou o discourse após modificar os locais?

sim. não fiz muito.

image

depois de mostrar minhas antigas habilidades em Ruby, apenas mudei todos para o inglês por enquanto. Abrirei um ticket sobre a localidade hebraica em seguida.

obrigado @JammyDodger pela movimentação para Bug, é só isso que é preciso para abrir um relatório de bug, ou devo abrir um oficial em algum rastreador de bugs?

Se uma localidade en for copiada, ocorre um erro durante a mesclagem (parece que as entradas não traduzidas são removidas e, se nada sobrar, ocorre um erro).

No entanto, remover config/locales/client.he.yml permite o login no meu site de teste.

Porque ele volta inteiramente para EN. Acho que esse é o comportamento esperado.

No locale hebraico config/locales/client.he.yml

    posts_likes_MF: |
      { count, plural,
          one {תגובה, }
          two {שתי תגובות, }
          many {# תגובות, }
        other {# תגובות, }
      }{ ratio, select,
          low { יחס גבוה בין פוסטים ללייקים, }
          med { יחס גבוה מאוד בין פוסטים ללייקים, }
         high { יחס גבוה במיוחד בין פוסטים ללייקים, }
        other {}
      } קפיצה לפוסט הראשון או האחרון…

a linha

          many {# תגובות, }

tem que ser deletada.

many não é permitido em hebraico (veja Language Plural Rules)

O problema pode ser resolvido através da interface do usuário. Para isso, o valor corrigido deve ser inserido em /admin/customize/site_texts/js.posts_likes_MF para o idioma hebraico:

{ count, plural,
    one {תגובה, }
    two {שתי תגובות, }
   other {# תגובות, }
}{ ratio, select,
    low { יחס גבוה בין פוסטים ללייקים, }
    med { יחס גבוה מאוד בין פוסטים ללייקים, }
   high { יחס גבוה במיוחד בין פוסטים ללייקים, }
  other {}
} קפיצה לפוסט הראשון או האחרון…

Parece um pouco estranho que o site inteiro possa ficar inutilizável ao inserir dados incorretos em uma personalização de texto.

2 curtidas

Registrá-lo aqui é o lugar para relatórios de bugs. :+1:

2 curtidas

Vou usar o git para ver quem é o culpado por essa linha. Pensei que a única parte permitida a fazer commit de alterações nisso era o crowdin? Além disso, se for esse o caso, por que reiniciar o unicorn depois de copiar o inglês sobre o hebraico não resolveria isso?

Realmente deveria haver uma distinção entre não permitido e não suportado.

Estranhamente, no código do Discourse, nem mesmo o “plural two” é suportado para nenhum dos códigos de idioma, o que É compartilhado com o árabe. Acho que é aqui que o problema precisa ser corrigido. Farei um PR para isso, mas definitivamente há uma necessidade de corrigir a falha rígida no campo many “superfluo”, pois parece que o Crowdin não está em conformidade com este arquivo plurals.rb.

Eu acho que é mais complicado.
As traduções do front-end são interpretadas pelo módulo do nó @messageformat/core usando messageformat-wrapper.

O problema é que as regras de plural são definidas em dois lugares. O outro foi recentemente alterado para usar uma biblioteca (DEV: Upgrade the MessageFormat library (JS) · discourse/discourse@301713e · GitHub).

No entanto, os plurais definidos na biblioteca nem sempre são os mesmos que o Discourse usava antes, e os em plurals.rb não foram alterados. Inconsistency in plural definition

Mas isso não explica por que o Crowdin criou uma versão separada para muitos.

2 curtidas

Adicionei as regras de campo necessárias para a tradução, mas isso não é uma solução para este bug, apenas uma compatibilidade para a saída do Crowdin.

Acho que a regra no final da linha também precisa de um ajuste.
No momento, isso ainda menciona apenas “one” e “other”.
rule: lambda { |n| n == 1 ? :one : :other }

Sim, eu errei. Eu corrigi com amend e perdi o fato de que fiz o push sem --force. Está corrigido agora.

Obrigado a todos, vamos continuar acompanhando o problema mais amplo neste tópico:

2 curtidas