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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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