Regras de inversão do I18nManager e ícones espelhados. Idiomas da direita para a esquerda (árabe, hebraico, persa, urdu) exigem espelhamento de layout - não apenas strings traduzidas. O React Native inverte o flexbox e as bordas start/end quando o RTL é habilitado; você ainda é responsável por ícones, animações e preenchimento assimétrico.
import { I18nManager } from "react-native";I18nManager.isRTL; // direção atual do layoutI18nManager.allowRTL(true); // permitir layout RTLI18nManager.forceRTL(true); // forçar RTL mesmo em dispositivo LTR (QA)I18nManager.swapLeftAndRightInRTL; // troca props de estilo left/right em RTL (helper legado)
forceRTL(true) em dispositivo LTR - útil para QA sem alterar o idioma do SO
Não chame forceRTL a cada renderização - apenas quando o idioma muda
Documente que recarregamento é necessário na cópia das configurações quando o usuário escolhe árabe
Checklist de lançamento RTL:✓ I18nManager alinhado com o idioma do app na inicialização✓ Sem marginLeft/paddingRight nos estilos de recursos (auditoria grep)✓ Ícones direcionais espelhados; logos intocados✓ Funcionalidade de voltar da navegação testada em dispositivo árabe✓ Configurações avisam sobre recarga breve na mudança de idioma✓ Revisão de screenshots de pseudolocale + tradução mais longa
Não de forma confiável no RN 0.86. Planeje um reloadAsync ao cruzar LTR ↔ RTL. Pequenas alterações de string dentro da mesma direção não precisam de recarga.
NativeWind/Tailwind suporta RTL?
Use utilitários lógicos ms-, me-, ps-, pe- onde disponíveis - veja NativeWind. Evite ml-/mr- físicos em componentes compartilhados.
Como testo RTL no simulador?
Defina o idioma do dispositivo para árabe OU chame I18nManager.forceRTL(true) por trás de um sinalizador de menu de desenvolvimento, depois recarregue.
Abas do Expo Router em RTL?
A ordem das abas espelha com RTL. Verifique se abas apenas com ícones ainda têm tabBarAccessibilityLabel traduzido.