Memories / Documentación

En esta página

Localización

El cliente Flutter y la CLI admiten inglés (en), chino simplificado (zh), japonés (ja), alemán (de) y francés (fr). El inglés es el idioma de reserva. Las variantes chinas del sistema se resuelven a la traducción en chino simplificado.

Cliente web y correos de registro

El cliente web alojado y los correos de verificación admiten inglés (en), chino simplificado (zh-CN), chino tradicional (zh-TW), japonés (ja), francés (fr), alemán (de) y español (es). Este conjunto es independiente del de los clientes nativos. El selector de idioma web funciona antes de iniciar sesión y solo guarda la preferencia de idioma. Sin una preferencia guardada, se utiliza la configuración regional del navegador; los idiomas no admitidos recurren al inglés. zh-Hant, zh-HK y zh-MO se resuelven a chino tradicional; el valor explícito zh-Hans se resuelve a chino simplificado.

Los mensajes web están en website/app/i18n.mjs. Añade las mismas claves a todos los catálogos. La solicitud de registro envía locale a Center; los asuntos y cuerpos de los correos en crates/center/src/saas/accounts/email.rs utilizan el idioma de esa solicitud. Los clientes existentes que lo omiten reciben inglés. El código de verificación permanece sin cambios. La reutilización de códigos pendientes y los límites de frecuencia se aplican también cuando cambia el idioma. El sitio independiente de documentación ofrece todas las guías y la política de privacidad en estos mismos siete idiomas. Al cambiar de idioma se conservan el documento y la sección actual.

Flutter

mobile/l10n.yaml configura el generador oficial de localización de Flutter. Añade mensajes a mobile/lib/l10n/app_en.arb y traduce las mismas claves en los otros cuatro archivos ARB. Utiliza claves descriptivas y marcadores de posición con nombre para mensajes completos; utiliza plurales ICU cuando los recuentos cambien la redacción. Declara los tipos de los marcadores de posición en la plantilla inglesa. Ejecuta flutter gen-l10n después de editar los recursos.

Los widgets obtienen las cadenas mediante context.l10n. El estado de la biblioteca actualiza su referencia de localización en didChangeDependencies, lo que permite que las operaciones asíncronas utilicen cadenas sin conservar un BuildContext entre esperas. flutter_localizations proporciona etiquetas de Material/Cupertino e intl da formato a fechas y recuentos. Mantén el inglés en primer lugar en preferred-supported-locales para que los idiomas desconocidos del sistema tengan un idioma de reserva determinista. iOS declara los idiomas admitidos en Runner/Info.plist.

El menú de idioma está disponible antes del desbloqueo. SharedPreferences solo almacena la preferencia no secreta language; system elimina esa preferencia. Si falla el guardado, se mantiene la selección existente y se muestra un error localizado. Los cambios de idioma no vuelven a crear el backend ni alteran la sesión desbloqueada. Sin una preferencia guardada, los cambios de idioma del sistema actualizan tanto la interfaz como las fuentes de reserva mientras la aplicación está en ejecución. Una opción guardada permanece fija hasta que se cambie o se restablezca el valor predeterminado del sistema.

Los errores locales se traducen al mostrarse, por lo que un aviso existente cambia con el idioma. Los errores nativos utilizan sus códigos estables para ofrecer un mensaje traducido de reserva. No traduzcas valores del protocolo, identificadores, URL, metadatos de cuentas, títulos, cuerpos, etiquetas o relaciones de los usuarios, registros de auditoría firmados ni valores secretos. Las vistas previas protegidas deben seguir utilizando la lista explícita de campos permitidos y las máscaras fijas de protected_cards.dart.

CLI

crates/cli/src/i18n.rs resuelve el idioma antes de que Clap muestre la ayuda. Orden de prioridad:

  1. --lang en|zh|ja|de|fr, admitido en el nivel superior y en los subcomandos.
  2. MEMORIES_LANG no vacío.
  3. La preferencia guardada en el directorio de datos de Memories seleccionado.
  4. La primera variable no vacía entre LC_ALL, LC_MESSAGES o LANG.
  5. La configuración regional del usuario de Windows, o inglés en otras plataformas sin variables de configuración regional.
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 preferencia no secreta se guarda como language.txt dentro de --home / MEMORIES_HOME (o del directorio de datos predeterminado de memories). El guardado utiliza una sustitución atómica del archivo. Funciona antes de la inicialización y sin un daemon en ejecución. No se crea ningún archivo de preferencias por el mero hecho de detectar el idioma del sistema. Si las preferencias no existen, no se pueden leer o no son válidas, se utiliza el sistema; las escrituras fallidas notifican un error. Las anulaciones temporales con --lang y MEMORIES_LANG no modifican el archivo.

Las variantes regionales como ja_JP.UTF-8 se normalizan a su idioma base. Los idiomas de entorno o sistema no admitidos recurren al inglés. Clap rechaza los valores explícitos no válidos de --lang. El análisis inicial se detiene en --, conservando los argumentos similares a opciones de idioma que se pasan a los programas capturados.

Los catálogos UTF-8 de crates/cli/locales/ se incorporan durante la compilación; los binarios instalados no necesitan archivos de recursos junto a ellos. Las claves de los catálogos son los mensajes ingleses originales. Conserva las variantes completas y las que omiten el punto de los comentarios de documentación de Clap, porque la ayuda breve elimina el punto final. Traduce tanto la ayuda breve como la extensa. Añade una entrada al catálogo para cada nuevo error y solicitud propios de la CLI.

Utiliza i18n::format para los marcadores de posición con nombre. La sustitución procesa la plantilla una sola vez, de modo que el texto del usuario con llaves no pueda convertirse en otro marcador de posición. La captura de contraseñas y secretos sigue utilizando entrada oculta. USE y APPROVE siguen siendo tokens literales de confirmación y deben aparecer sin cambios en sus solicitudes traducidas.

La salida JSON conserva la versión existente, los nombres de campos, los códigos de error y el estado de salida. Solo se localizan los mensajes dirigidos a personas. Los diagnósticos nativos o del sistema operativo sin traducción conservan su texto original después de un resumen localizado; los diagnósticos de análisis de Clap incluyen una introducción localizada y los detalles originales de los argumentos. Los esquemas MCP, los nombres de herramientas y los mensajes de protocolo permanecen estables y no dependen del idioma de la CLI.

Validación

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

Las pruebas Rust cubren todos los catálogos, la cobertura de la ayuda, la conservación de marcadores de posición, la prioridad de configuración regional, los argumentos reenviados, la ayuda anidada y los errores localizados con campos JSON estables. Las pruebas Flutter cubren la paridad de los catálogos, las cinco configuraciones regionales del sistema, el idioma de reserva para configuraciones no admitidas, la persistencia de preferencias, la conservación de sesiones, los diálogos localizados con anchuras de teléfono y las vistas previas enmascaradas de tarjetas protegidas.

En equipos con un proxy HTTP, excluye localhost, 127.0.0.1 y ::1 del proxy al ejecutar pruebas de widgets; el WebSocket local de pruebas de Flutter debe conectarse directamente. Sigue siendo necesario probar en dispositivos para verificar las fuentes de reserva de la plataforma, los selectores nativos de archivos y la interfaz del navegador OAuth, cuyo idioma administra el sistema operativo o el proveedor.