Memories / Documentation

Sur cette page

Localisation

Le client Flutter et la CLI prennent en charge l’anglais (en), le chinois simplifié (zh), le japonais (ja), l’allemand (de) et le français (fr). L’anglais est la langue de repli. Les variantes chinoises du système utilisent la traduction en chinois simplifié.

Client Web et e-mails d’inscription

Le client Web hébergé et les e-mails de vérification prennent en charge l’anglais (en), le chinois simplifié (zh-CN), le chinois traditionnel (zh-TW), le japonais (ja), le français (fr), l’allemand (de) et l’espagnol (es). Cet ensemble est distinct de celui des clients natifs. Le sélecteur de langue Web fonctionne avant la connexion et ne stocke que la préférence linguistique. Sans préférence enregistrée, la langue du navigateur est utilisée ; les langues non prises en charge utilisent l’anglais. zh-Hant, zh-HK et zh-MO correspondent au chinois traditionnel ; zh-Hans explicite correspond au chinois simplifié.

Les messages Web se trouvent dans website/app/i18n.mjs. Ajoutez les mêmes clés à chaque catalogue. La demande d’inscription envoie locale à Center ; les objets et les corps des e-mails dans crates/center/src/saas/accounts/email.rs utilisent la langue de cette demande. Les clients existants qui l’omettent reçoivent l’anglais. Le code de vérification reste inchangé. La réutilisation des codes en attente et la limitation du débit s’appliquent aussi lors des changements de langue. Le site de documentation indépendant propose chaque guide et la politique de confidentialité dans ces mêmes sept langues. Le changement de langue conserve le document et la section actuelle.

Flutter

mobile/l10n.yaml configure le générateur officiel de localisation de Flutter. Ajoutez les messages à mobile/lib/l10n/app_en.arb et traduisez les mêmes clés dans les quatre autres fichiers ARB. Utilisez des clés descriptives et des paramètres nommés pour les messages entiers ; utilisez les pluriels ICU lorsque le nombre modifie la formulation. Déclarez les types des paramètres dans le modèle anglais. Exécutez flutter gen-l10n après avoir modifié les ressources.

Les widgets obtiennent les chaînes via context.l10n. L’état de la bibliothèque actualise sa référence de localisation dans didChangeDependencies, ce qui permet aux opérations asynchrones d’utiliser les chaînes sans conserver de BuildContext entre les attentes. flutter_localizations fournit les libellés Material/Cupertino et intl formate les dates et les nombres. Gardez l’anglais en premier dans preferred-supported-locales pour garantir un repli déterministe aux langues système inconnues. iOS déclare les langues prises en charge dans Runner/Info.plist.

Le menu de langue est disponible avant le déverrouillage. SharedPreferences ne stocke que la préférence non secrète language ; system supprime cette préférence. Un échec d’enregistrement conserve la sélection existante et affiche une erreur localisée. Les changements de langue ne recréent pas le backend et ne modifient pas la session déverrouillée. Sans préférence enregistrée, les changements de langue système actualisent l’interface et les polices de repli pendant l’exécution de l’application. Un choix enregistré reste fixe jusqu’à sa modification ou sa réinitialisation à la valeur par défaut du système.

Les erreurs locales sont traduites à l’affichage ; une bannière existante change donc avec la langue. Les erreurs natives utilisent leurs codes stables pour un message de repli traduit. Ne traduisez pas les valeurs du protocole, les identifiants, les URL, les métadonnées des comptes, les titres, corps, étiquettes et relations des utilisateurs, les enregistrements d’audit signés ni les valeurs secrètes. Les aperçus protégés doivent continuer d’utiliser la liste explicite des champs autorisés et les masques fixes dans protected_cards.dart.

CLI

crates/cli/src/i18n.rs détermine la langue avant que Clap affiche l’aide. Ordre de priorité :

  1. --lang en|zh|ja|de|fr, pris en charge au niveau principal et dans les sous-commandes.
  2. MEMORIES_LANG non vide.
  3. La préférence enregistrée dans le répertoire personnel Memories sélectionné.
  4. La première valeur non vide parmi LC_ALL, LC_MESSAGES ou LANG.
  5. La langue de l’utilisateur Windows, ou l’anglais sur les autres plateformes sans variables de langue.
memories language zh       # Save a language for subsequent commands
memories language          # Show the saved choice and effective language
memories language system   # Clear the choice and follow the system

La préférence non secrète est enregistrée dans language.txt sous --home / MEMORIES_HOME (ou dans le répertoire de données memories par défaut). L’enregistrement utilise un remplacement atomique du fichier. Il fonctionne avant l’initialisation et sans daemon actif. Aucun fichier de préférence n’est créé par la seule détection de la langue système. Les préférences absentes, illisibles ou invalides utilisent le système ; les écritures échouées signalent une erreur. Les remplacements temporaires --lang et MEMORIES_LANG ne modifient pas le fichier.

Les variantes de langue telles que ja_JP.UTF-8 sont normalisées vers leur langue de base. Les langues de l’environnement ou du système non prises en charge utilisent l’anglais. Clap rejette les valeurs --lang explicites invalides. Le balayage initial s’arrête à --, préservant les arguments ressemblant à des options de langue transmis aux programmes capturés.

Les catalogues UTF-8 de crates/cli/locales/ sont intégrés à la compilation ; les exécutables installés n’ont pas besoin de fichiers de ressources à leurs côtés. Les clés des catalogues sont les messages anglais originaux. Conservez les variantes complètes et sans point final des commentaires de documentation Clap, car l’aide courte retire le point final. Traduisez l’aide courte et l’aide longue. Ajoutez une entrée de catalogue pour chaque nouvelle erreur et invite appartenant à la CLI.

Utilisez i18n::format pour les paramètres nommés. La substitution traite le modèle une seule fois ; le texte utilisateur contenant des accolades ne peut donc pas devenir un autre paramètre. La saisie des mots de passe et des secrets reste masquée. USE et APPROVE restent des jetons de confirmation littéraux et doivent apparaître inchangés dans leurs invites traduites.

La sortie JSON conserve la version, les noms de champs, les codes d’erreur et le code de sortie existants. Seuls les messages destinés aux personnes sont localisés. Les diagnostics natifs ou du système sans correspondance conservent leur texte original après un résumé localisé ; les diagnostics d’analyse de Clap incluent une introduction localisée et les détails originaux des arguments. Les schémas MCP, les noms d’outils et les messages du protocole restent stables et ne dépendent pas de la langue de la CLI.

Validation

cargo test -p memories --locked
cd mobile
flutter gen-l10n
flutter analyze
flutter test

Les tests Rust couvrent tous les catalogues, la couverture de l’aide, la préservation des paramètres, la priorité des langues, les arguments transmis, l’aide imbriquée et les erreurs localisées avec des champs JSON stables. Les tests Flutter couvrent la parité des catalogues, les cinq langues système, le repli pour les langues non prises en charge, la persistance des préférences, la préservation de la session, les boîtes de dialogue localisées aux largeurs de téléphone et les aperçus masqués des cartes protégées.

Sur les hôtes utilisant un proxy HTTP, excluez localhost, 127.0.0.1 et ::1 du proxy lors des tests de widgets ; le WebSocket de test local de Flutter doit se connecter directement. Des tests sur appareil restent nécessaires pour vérifier les polices de repli de la plateforme, les sélecteurs de fichiers natifs et l’interface du navigateur OAuth, dont la langue est gérée par le système ou le fournisseur.