EmuLabZip logo EmuLabZip

Idioma, tamanho do texto e texto que não cabe

Atualizado em · Editar esta página no GitHub

A view Audit encontrando um rótulo comprido demais para a sua linha

O texto é onde os layouts quebram: uma palavra em alemão é mais longa, o árabe corre da direita para a esquerda, e quem precisa de texto grande o coloca em 200%. O EmuLabZip pode mudar o idioma e o tamanho do texto de um dispositivo, verificar se há na tela texto que não cabe e varrer uma tela por vários idiomas e tamanhos em um só comando.

Mudando o dispositivo#

emulabzip control locale en-XA --app com.example.shop   # long, accented text
emulabzip control locale ar-XB --app com.example.shop   # right to left
emulabzip control reset-locale --app com.example.shop
emulabzip control font-scale 130                        # percent of normal; 100 puts it back
emulabzip control display --width 720 --height 1600 --density 320     # Android
emulabzip control reset-display
AndroidiOS Simulator
Idiomacmd locale set-app-locales: um app por vez, Android 13 e mais novos. Os pseudo-locales en-XA e ar-XB funcionam. O app é avisado e recria a tela deledefaults write -g AppleLanguages e AppleLocale para o simulador inteiro; um app assume o idioma quando inicia de novo
Tamanho do textosettings put system font_scalesimctl ui … content_size: o tamanho de Dynamic Type mais próximo da porcentagem (130% é extra-extra-extra-large, 200% é accessibility-extra-large)
Tamanho e densidade da telawm size, wm densityNão disponível

Uma tag de idioma tem letras, dígitos e hifens (de-DE, pt-BR, zh-Hans-CN). O tamanho do texto vai de 50 a 300 por cento. Tudo isso também está na view Controls, em Text size and language e Display size.

Verificando uma tela#

emulabzip i18n check            # the screen as it is now
emulabzip i18n check --rtl      # it is shown in a right-to-left language: also check the layout was mirrored
RegraProcura
text-off-screenTexto que passa da borda da tela (a menos que esteja em algo que rola)
text-clipped-by-parentTexto que não cabe dentro do seu contêiner, que então o corta
text-cut-offUma única linha de texto presa ao espaço que recebeu, cuja tinta chega ao fim da sua caixa: provavelmente está cortada ou termina em reticências
rtl-not-mirroredEm um idioma da direita para a esquerda, a maior parte do texto da tela ainda à esquerda

text-cut-off é uma heurística. O layout diz onde está cada view, e o screenshot diz se o texto dela vai até o fim da caixa. Um rótulo que apenas abraça o seu texto não é reportado (a caixa dele só é tão larga quanto o texto), e um rótulo só é reportado quando a caixa dele termina onde o contêiner, ou a próxima view da linha, não deixa espaço. A mensagem diz "may be". Sem um screenshot, só as regras de layout rodam.

Varrendo#

emulabzip i18n sweep --app com.example.shop --locales en-XA,ar-XB --scales 100,130,200

A varredura testa cada idioma em cada tamanho de texto, lê o layout e imprime uma tabela: quantos achados, quais e quais são piores do que o dispositivo como está agora. O dispositivo é restaurado (tamanho do texto e idioma) quando termina, e também quando um passo falha. --fail-on-worse sai com 1 quando alguma configuração é pior. No iOS Simulator só os tamanhos de texto são varridos, porque um app só assume um novo idioma quando inicia de novo.

A escala do texto também é examinada pela varredura: em 200% ela reporta alvos de toque e ordem de foco que pioraram.

Para assistentes#

Por MCP: control_locale, control_font_scale, control_display_size e check_text.

Limites#

  • O Android muda o idioma de um app, não o do dispositivo. Idiomas para o dispositivo todo exigem root.
  • As heurísticas veem views, não glifos. Uma fonte de ícones, um rótulo desenhado à mão ou texto em um jogo não é avaliado.
  • Os pseudo-locales dependem de o app ter as strings dele em resources; texto fixo no código fica como está.