Textes et langues
Aucun texte affiché n’est écrit en dur : le hook daroms-check-rules refuse un texte dans le JSX, et daroms doctor vérifie que chaque langue a les mêmes clés.
Écrire un texte
Section intitulée « Écrire un texte »{ "books": { "title": "Livres", "count": "{{count}} livres" } }{ "books": { "title": "Books", "count": "{{count}} books" } }import { useT } from '@daroms/i18n'
const t = useT()<Title>{t('books.title')}</Title><Caption>{t('books.count', { count: books.length })}</Caption>useT() est typé par les clés de l’app : une clé absente est une erreur TypeScript.
Règles des textes
Section intitulée « Règles des textes »- Mêmes clés dans chaque fichier de
locales/(vérifié pardaroms doctor). - Ni emoji, ni tiret long dans les textes.
- Textes d’interface courts, en voix active ; un bouton dit ce qu’il fait (« Ajouter un livre »).
Namespaces
Section intitulée « Namespaces »| Namespace | Contenu | Accès |
|---|---|---|
app (défaut) |
locales/*.json de l’app |
useT() |
daroms |
textes du cœur : boutons standard, états, erreurs, validation | useDaromsT(), ou clé préfixée daroms:validation.email |
<module> |
textes d’un module (auth, payments, aiChat…) |
hook du module ; clé préfixée aiChat:title dans le manifest |
useTranslateKey() traduit une clé éventuellement préfixée (daroms:validation.required) : c’est ce qu’utilisent FormField et ErrorState.
- Le manifest déclare
locales(fr,en,es,de,it,pt) etdefaultLocale. - La langue de l’appareil est détectée (expo-localization) ; l’utilisateur peut la changer dans le module
settings. - Ajouter une langue : l’ajouter à
localesdansapp.manifest.ts, créerlocales/<iso>.jsonavec toutes les clés, puisbun daroms doctor. - Contrôle visuel dans une langue :
bun daroms shot /books --locale en.
Dates, nombres et prix suivent la langue : formatDate, formatRelative, formatNumber, formatPrice, formatPercent, formatWeekday de @daroms/lib. Voir Paquets.