Skip to content

A interface só existe em português, escrita direto no código: 0 de 51 componentes Vue e 8 chamadas de tradução em 101 templates #397

Description

@matbrgz

Relacionadas: #390 (BNCC), #396 (currículos), #394 (acessibilidade), #32 (redesign).

O ponto

A interface do microHelium só existe em português, e não por configuração: as strings estão escritas direto nos templates e componentes. O README está em inglês, o config/app.php tem locale padrão en, e nenhuma tela muda de idioma ao trocar essa configuração.

Isso fecha a porta a dois públicos que os próprios currículos oficiais estão abrindo:

  • América Latina hispanófona. A Argentina tem programação na escolaridade obrigatória desde a Resolución CFE nº 343/18, de 12/09/2018 (PDF). Uma escola de lá não usaria uma interface em português.
  • Provas internacionais e seletivas com equipes de mais de um país, onde o inglês é a língua comum.

Convenção: [fato] tem fonte ou caminho de arquivo; [proposta] é sugestão; [hipótese] não foi medida.

O tamanho, medido no master [fato]

O quê Medido
Componentes .vue em resources/js 51
...que usam $t(), useI18n ou vue-i18n 0 (vue-i18n não está em package.json)
Templates .blade.php em resources/views 101
Chamadas __(), @lang() ou trans() em resources/views + app 8
Arquivos em resources/lang/{en,pt_BR} só os 4 do framework (auth, pagination, passwords, validation)
<html lang> fixo em pt-BR em layouts/app.blade.php e layouts/auth.blade.php
config('app.locale') env('APP_LOCALE', 'en')

Exemplos de strings no código: 'Facil'/'Medio'/'Dificil' em ProblemBank::getDifficultyLabelAttribute(), e 'O codigo precisa estar em UTF-8 valido.' em PracticeController.

O locale padrão en com a interface toda em pt-BR já é uma inconsistência hoje: mensagens de validação do framework podem sair em inglês ao lado de rótulos em português, a menos que a instalação configure APP_LOCALE=pt_BR. [hipótese] Não testei qual das duas aparece numa instalação limpa.

Propostas, em ordem [proposta]

  1. Corrigir o padrão agora, sem esperar o resto: APP_LOCALE padrão pt_BR (é o idioma real da interface) e <html lang="{{ str_replace('_', '-', app()->getLocale()) }}">. Uma linha em cada layout, e fecha o risco de WCAG 3.1.1 que a Acessibilidade virou exigência legal para quem hospeda o microHelium, e o projeto não tem como mostrar o que atende #394 aponta.
  2. Uma fonte única de strings para Blade e Vue: arquivos JSON do Laravel (lang/pt_BR.json, lang/es.json, lang/en.json) servidos ao Vue, em vez de dois sistemas. [hipótese] que isso seja mais simples do que adotar vue-i18n com arquivos próprios; decidir medindo o tamanho do bundle, que a O frontend pré-Vite continua no repositório, e o axios que ele instala vai no bundle de toda página #249 reduziu de propósito.
  3. Extração incremental, por fluxo, na mesma ordem da Acessibilidade virou exigência legal para quem hospeda o microHelium, e o projeto não tem como mostrar o que atende #394: participante (login, problemas, envio, veredito, clarificação, placar) → treino → juiz → administração. Um teste que falhe em string literal nova nos arquivos já migrados impede regressão.
  4. es e en como os dois primeiros idiomas novos. es pela América Latina; en porque o README e a API CLICS já estão em inglês.
  5. Idioma por usuário, com o padrão da instalação como fallback; enunciado e clarificação continuam no idioma em que a organização os escreveu.

Perguntas para o mantenedor

  1. Vale i18n agora, com 51 componentes e 101 templates, ou depois que a interface estabilizar? O custo cresce com cada tela nova que nasce com string literal.
  2. Mensagens de veredito e de erro de compilação que o juiz gera (os invocadores de Portugol e Scratch, por exemplo) entram no escopo?
  3. Quem revisa es? Tradução sem revisor nativo vira dívida.

Fora de escopo

  • Traduzir enunciados de problema.
  • Tradução automática.
  • Idiomas da direita para a esquerda.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions