- Copy enso/docs tree to services/docv/enso-docs (refresh via cp -a from enso repo) - Document mirror and refresh command in services/docv/README.md - Ignore services/docv/target for local Rust workspace - Track docv-service-integration, API docv.md, and related doc index updates
5.1 KiB
5.1 KiB
Internationalisation (enso-front)
Catalogues et locale
- Référence des clés :
enso/enso-front/src/i18n/messages.fr.ts(littérauxas const). Les chemins valides pourtranslate()/t()sont typés viaMessagePath(enso/enso-front/src/i18n/messagePath.ts). - Second catalogue :
enso/enso-front/src/i18n/messages.en.ts, même forme typée avecMessageCatalog(DeepStringMapdansmessages.fr.ts). - Locale par défaut (sans stockage) :
DEFAULT_LOCALE(fr) dansenso/enso-front/src/i18n/catalog.ts. - Préférence utilisateur :
enso/enso-front/src/i18n/localeStorage.ts— clélocalStorageAPP_LOCALE_STORAGE_KEY(enso-front-app-locale), valeursfr|en. - React :
I18nProvider(enso/enso-front/src/i18n/context.tsx) lit la valeur au montage (useLayoutEffect), exposelocale,setLocale(persiste), ettsurgetMessages(locale). ComposantDocumentLangSync:document.documentElement.lang= préfixe BCP 47 (frouen). Écoutestoragepour les autres ondulations. - Hors React (formatters, messages docv/OAuth) :
getActiveAppLocale()/setActiveAppLocale()dansenso/enso-front/src/i18n/activeLocale.ts, synchronisés avec le provider. - BCP 47 pour
Intl:bcp47ForAppLocale()—fr→fr-FR,en→en-US(catalog.ts). - Métadonnées Next (serveur) :
app/layout.tsxutilise encoregetMessages(DEFAULT_LOCALE)pourmetadata; le<html lang="fr">statique est complété côté client parDocumentLangSync. - Résolution :
translate()lève si la clé est absente (enso/enso-front/src/i18n/translate.ts).
Libellés partagés
- Clés sous
shared.*pour éviter les doublons (ex.shared.labelActiveCasesShort,shared.labelPermanentInfoShort) : stats tableau de bord, barre latérale, onglets société.
Menu utilisateur et 404
- Langue :
AppLayoutUserMenu—layout.menuLanguage,layout.languageFr,layout.languageEn, groupe radio relié àsetLocale. - 404 :
NotFoundContent—layout.notFoundTitle,layout.notFoundBackToDashboard.
Erreurs docv (pas de texte serveur brut à l’écran)
translateDocvFailure()(enso/enso-front/src/i18n/docvErrorMessage.ts) mappe statuts HTTP, configuration manquante, et erreurs réseau verserrors.docv*du catalogue actif (getActiveAppLocale()).- Utilisé par :
loadStubListsOnce,useOfficesCatalog,resolveOfficePageLoad,resolveCasePageLoad.
OAuth / docv callback
runDocvCallbackExchange: union discriminée (enso/enso-front/src/lib/docvOAuthBrowser.ts), messages viagetMessages(getActiveAppLocale()).
Données métier
Company.siren/address:nullsi l’API ne les fournit pas ; affichagecommon.notProvided.- Société vs dossier d’opération : une société (écran +
DocvOffice) correspond au dossier permanent et n’est pas une opération ; les lignes Dossiers sous la fiche société sont les opérations / demandes (ressource APIfolders, typeCase). Libellés orientés utilisateur :dashboard.companiesDescription,company.permanentDescription,shared.labelPermanentInfoShort. Référence : MODELE_SOCIETES_ET_DOSSIERS_DOPERATION.md. - Type d’opération : préfixes
case.operationType.*(presets, section démo, formulaire nouveau dossier, fiche dossier). Checklists métier par slug :case.operationChecklist.<slug>.*(title,description,sourceLine,legendTitle,suggestedTitle— ce dernier pour le dialogue nouveau dossier si le slug est enregistré danssuggestedFolderTitles.ts). Référence : OPERATION_CHECKLISTS.md. Messagerie :messaging.description(sociétés + opérations).
Formatters et Intl partagé
- Module
enso/enso-front/src/lib/intlAppLocale.ts:appIntlBcp47()(BCP 47 =bcp47ForAppLocale(getActiveAppLocale())),formatNumberForAppLocale()pour les nombres à l’écran. - Hors enso-front : pas de runtime JavaScript/
Intldansenso-backoudocv(Rust) ; seul le front consomme ce module. - Types de pièces, statuts de dossier, tailles fichiers, archétype DP :
translate(getMessages(getActiveAppLocale()), …)dansenso/enso-front/src/lib/formatters.ts(ex.company.dpArchetypeDemoEnterprisepourdp_archetype = entreprise_demo). - Dates courtes :
formatDate()utilisetoLocaleDateString(appIntlBcp47(), …). - Sidebar : tri des sociétés et listes de dossiers actifs dans
appSidebarModel.tsvialocaleCompare(..., appIntlBcp47()); ordre secondaire société / titre lorsque le statut « action en attente » est identique. - Graphiques : tooltip Recharts (
components/ui/chart.tsx) formate les valeurs numériques avecformatNumberForAppLocalelorsque la valeur est un nombre fini.
Suspense
- Repli React explicite traduit :
I18nSuspenseFallback(enso/enso-front/src/components/i18n/I18nSuspenseFallback.tsx).
Recherche sidebar
AppSidebarSearchResults:layout.searchNoResults,layout.searchContextSeparator(séparation société / dossier dans la ligne secondaire).