267 lines
12 KiB
Dart
267 lines
12 KiB
Dart
import 'package:flutter/widgets.dart';
|
||
|
||
class AppStrings {
|
||
AppStrings(this.locale);
|
||
|
||
final Locale locale;
|
||
|
||
bool get isFrench => locale.languageCode == 'fr';
|
||
|
||
String text(String key) =>
|
||
(_values[key] ?? const <String, String>{})[isFrench ? 'fr' : 'en'] ?? key;
|
||
|
||
static const Map<String, Map<String, String>>
|
||
_values = <String, Map<String, String>>{
|
||
'add_box': {
|
||
'fr': 'Ajouter une nouvelle OpenParcelBox',
|
||
'en': 'Add a new OpenParcelBox',
|
||
},
|
||
'restore_backup': {
|
||
'fr': 'Restaurer une sauvegarde',
|
||
'en': 'Restore a backup',
|
||
},
|
||
'open': {'fr': 'Ouvrir', 'en': 'Open'},
|
||
'synchronize': {'fr': 'Synchroniser', 'en': 'Synchronize'},
|
||
'reconnect': {'fr': 'Se reconnecter', 'en': 'Reconnect'},
|
||
'history': {'fr': 'Historique', 'en': 'History'},
|
||
'permanent_codes': {'fr': 'Codes permanents', 'en': 'Permanent codes'},
|
||
'temporary_codes': {'fr': 'Codes temporaires', 'en': 'Temporary codes'},
|
||
'nfc_tags': {'fr': 'Tags NFC', 'en': 'NFC tags'},
|
||
'guests': {'fr': 'Invités', 'en': 'Guests'},
|
||
'settings': {'fr': 'Paramètres', 'en': 'Settings'},
|
||
'close': {'fr': 'Fermer', 'en': 'Close'},
|
||
'error': {'fr': 'Erreur', 'en': 'Error'},
|
||
'add': {'fr': 'Ajouter', 'en': 'Add'},
|
||
'delete': {'fr': 'Supprimer', 'en': 'Delete'},
|
||
'edit': {'fr': 'Modifier', 'en': 'Edit'},
|
||
'copy_code': {'fr': 'Copier le code', 'en': 'Copy code'},
|
||
'cancel': {'fr': 'Annuler', 'en': 'Cancel'},
|
||
'save': {'fr': 'Enregistrer', 'en': 'Save'},
|
||
'scan': {'fr': 'Scanner', 'en': 'Scan'},
|
||
'scan_qr': {
|
||
'fr': 'Scanner un QR code invité',
|
||
'en': 'Scan a guest QR code',
|
||
},
|
||
'box_name': {'fr': 'Identifiant de la box', 'en': 'Box identifier'},
|
||
'box_name_help': {
|
||
'fr':
|
||
'Donnez un nom à cette box, puis sélectionnez l’appareil détecté à proximité.',
|
||
'en':
|
||
'Name this box, then select the nearby device that has been detected.',
|
||
},
|
||
'nearby_boxes': {
|
||
'fr': 'OpenParcelBox détectées',
|
||
'en': 'Detected OpenParcelBox devices',
|
||
},
|
||
'search': {'fr': 'Rechercher', 'en': 'Search'},
|
||
'register_box': {'fr': 'Ajouter cette box', 'en': 'Add this box'},
|
||
'registration_wait': {
|
||
'fr':
|
||
'Connexion sécurisée à la box en cours. Veuillez patienter quelques instants…',
|
||
'en':
|
||
'Secure connection to the box is in progress. Please wait a moment…',
|
||
},
|
||
'registration_failed': {
|
||
'fr': 'Impossible d’ajouter la box',
|
||
'en': 'The box could not be added',
|
||
},
|
||
'box_already_has_admin': {
|
||
'fr':
|
||
"Cette OpenParcelBox a déjà un administrateur enregistré. Restaurez une sauvegarde de l'application contenant l'identité administrateur, utilisez un QR code invité, ou réinitialisez complètement la box avant de l'ajouter comme nouvel administrateur.",
|
||
'en':
|
||
'This OpenParcelBox already has a registered administrator. Restore an app backup that contains the administrator identity, use a guest QR code, or fully reset the box before adding it as a new administrator.',
|
||
},
|
||
'box_identity_mismatch': {
|
||
'fr':
|
||
"La box refuse l'identité restaurée par l'application. Cela arrive si la box a gardé une autre identité administrateur en NVS. Restaurez la sauvegarde correspondant exactement à cette box, utilisez un QR code invité valide, ou utilisez le bouton de réinitialisation interne.",
|
||
'en':
|
||
'The box rejected the restored application identity. This happens when the box still stores a different administrator identity in NVS. Restore the backup that exactly matches this box, use a valid guest QR code, or use the internal reset button.',
|
||
},
|
||
'select_box': {
|
||
'fr': 'Sélectionnez une OpenParcelBox dans la liste.',
|
||
'en': 'Select an OpenParcelBox from the list.',
|
||
},
|
||
'no_results': {
|
||
'fr': 'Aucune OpenParcelBox détectée.',
|
||
'en': 'No OpenParcelBox detected.',
|
||
},
|
||
'connected': {'fr': 'Connectée', 'en': 'Connected'},
|
||
'disconnected': {'fr': 'Déconnecté', 'en': 'Disconnected'},
|
||
'connecting': {'fr': 'Connexion…', 'en': 'Connecting…'},
|
||
'no_code': {'fr': 'Aucun code.', 'en': 'No code.'},
|
||
'new_code': {'fr': 'Générer un code', 'en': 'Generate a code'},
|
||
'edit_code': {'fr': 'Modifier le code', 'en': 'Edit code'},
|
||
'edit_permanent_code': {
|
||
'fr': 'Modifier le code permanent',
|
||
'en': 'Edit permanent code',
|
||
},
|
||
'code_input_help': {
|
||
'fr': 'Saisissez les six chiffres du nouveau code.',
|
||
'en': 'Enter the six digits of the new code.',
|
||
},
|
||
'code_already_permanent': {
|
||
'fr': 'Ce code est déjà utilisé par un autre code permanent.',
|
||
'en': 'This code is already used by another permanent code.',
|
||
},
|
||
'convert_temporary_code_title': {
|
||
'fr': 'Convertir le code temporaire ?',
|
||
'en': 'Convert temporary code?',
|
||
},
|
||
'convert_temporary_code_message': {
|
||
'fr':
|
||
'Ce code existe déjà comme code temporaire. Souhaitez-vous le faire passer en code permanent ? Le code permanent que vous modifiez sera remplacé.',
|
||
'en':
|
||
'This code already exists as a temporary code. Do you want to convert it to a permanent code? The permanent code you are editing will be replaced.',
|
||
},
|
||
'convert': {'fr': 'Convertir', 'en': 'Convert'},
|
||
'code_limit': {
|
||
'fr': 'La limite de codes est atteinte.',
|
||
'en': 'The code limit has been reached.',
|
||
},
|
||
'code_count': {'fr': 'Codes enregistrés', 'en': 'Stored codes'},
|
||
'no_history': {
|
||
'fr': 'Aucune ouverture enregistrée.',
|
||
'en': 'No opening has been recorded.',
|
||
},
|
||
'opened_by_permanent': {'fr': 'Code permanent', 'en': 'Permanent code'},
|
||
'opened_by_temporary': {'fr': 'Code temporaire', 'en': 'Temporary code'},
|
||
'opened_by_nfc': {'fr': 'Tag NFC', 'en': 'NFC tag'},
|
||
'opened_by_app': {'fr': 'Application', 'en': 'Application'},
|
||
'tag_name': {'fr': 'Nom du tag', 'en': 'Tag name'},
|
||
'tag_uid': {'fr': 'UID du tag', 'en': 'Tag UID'},
|
||
'pairing_mode': {'fr': 'Mode appairage', 'en': 'Pairing mode'},
|
||
'nfc_pairing_title': {
|
||
'fr': 'Appairage d’un tag NFC',
|
||
'en': 'Pair an NFC tag',
|
||
},
|
||
'nfc_pairing_wait': {
|
||
'fr':
|
||
'Présentez un nouveau tag au lecteur de la box dans les 15 secondes.',
|
||
'en': 'Hold a new tag near the box reader within 15 seconds.',
|
||
},
|
||
'nfc_pairing_detected': {
|
||
'fr': 'Tag détecté. Choisissez un nom avant de l’autoriser.',
|
||
'en': 'Tag detected. Choose a name before authorizing it.',
|
||
},
|
||
'nfc_pairing_timeout': {
|
||
'fr': 'Aucun tag n’a été détecté dans les 15 secondes.',
|
||
'en': 'No tag was detected within 15 seconds.',
|
||
},
|
||
'nfc_pairing_exists': {
|
||
'fr': 'Ce tag est déjà présent dans la liste des tags autorisés.',
|
||
'en': 'This tag is already in the authorized tag list.',
|
||
},
|
||
'nfc_reader_unavailable': {
|
||
'fr': 'Le lecteur NFC de la box est indisponible.',
|
||
'en': 'The box NFC reader is unavailable.',
|
||
},
|
||
'add_manually': {'fr': 'Ajouter manuellement', 'en': 'Add manually'},
|
||
'nfc_unavailable': {
|
||
'fr': 'Le NFC est indisponible sur ce téléphone.',
|
||
'en': 'NFC is unavailable on this phone.',
|
||
},
|
||
'hold_tag': {
|
||
'fr': 'Approchez un tag NFC du téléphone…',
|
||
'en': 'Hold an NFC tag near the phone…',
|
||
},
|
||
'tag_name_help': {
|
||
'fr': 'Choisissez un nom qui permettra de reconnaître facilement ce tag.',
|
||
'en': 'Choose a name that will make this tag easy to recognize.',
|
||
},
|
||
'rename_tag_help': {
|
||
'fr': 'Modifiez le nom affiché pour ce tag NFC.',
|
||
'en': 'Change the display name for this NFC tag.',
|
||
},
|
||
'tag_uid_help': {
|
||
'fr': 'Saisissez l’UID inscrit sur le tag NFC, avec ou sans séparateurs.',
|
||
'en': 'Enter the UID printed on the NFC tag, with or without separators.',
|
||
},
|
||
'pairing_name_help': {
|
||
'fr':
|
||
'Nommez le tag, puis présentez-le au lecteur de la box après validation.',
|
||
'en': 'Name the tag, then hold it near the box reader after confirming.',
|
||
},
|
||
'guest_name': {'fr': "Nom de l'invité", 'en': 'Guest name'},
|
||
'guest_name_help': {
|
||
'fr': 'Saisissez le nom qui identifiera cet invité dans l’application.',
|
||
'en': 'Enter the name that will identify this guest in the application.',
|
||
},
|
||
'show_qr': {'fr': 'Voir le QR code', 'en': 'Show QR code'},
|
||
'no_guest': {'fr': 'Aucun invité.', 'en': 'No guest.'},
|
||
'language': {'fr': 'Langue', 'en': 'Language'},
|
||
'automatic': {'fr': 'Automatique', 'en': 'Automatic'},
|
||
'french': {'fr': 'Français', 'en': 'French'},
|
||
'english': {'fr': 'Anglais', 'en': 'English'},
|
||
'backup': {
|
||
'fr': "Sauvegarder les paramètres de l'app",
|
||
'en': 'Back up app settings',
|
||
},
|
||
'last_backup': {'fr': 'Dernière sauvegarde', 'en': 'Last backup'},
|
||
'last_backup_never': {
|
||
'fr': 'Dernière sauvegarde : jamais',
|
||
'en': 'Last backup: never',
|
||
},
|
||
'backup_location': {
|
||
'fr': "Choisir l'emplacement de sauvegarde",
|
||
'en': 'Choose backup location',
|
||
},
|
||
'no_backup_location': {
|
||
'fr': 'Aucun chemin de sauvegarde n’est actuellement choisi.',
|
||
'en': 'No backup location is currently selected.',
|
||
},
|
||
'restore': {'fr': 'Restaurer une sauvegarde', 'en': 'Restore a backup'},
|
||
'password': {'fr': 'Mot de passe', 'en': 'Password'},
|
||
'show_password': {'fr': 'Afficher le mot de passe', 'en': 'Show password'},
|
||
'hide_password': {'fr': 'Masquer le mot de passe', 'en': 'Hide password'},
|
||
'backup_password_help': {
|
||
'fr':
|
||
'Un mot de passe est obligatoire pour chiffrer la sauvegarde. Il n’est pas enregistré : conservez-le précieusement.',
|
||
'en':
|
||
'A password is required to encrypt the backup. It is not stored, so keep it safe.',
|
||
},
|
||
'restore_password_help': {
|
||
'fr':
|
||
'Saisissez le mot de passe utilisé lors de la création de cette sauvegarde.',
|
||
'en': 'Enter the password used when this backup was created.',
|
||
},
|
||
'input_help': {
|
||
'fr': 'Renseignez la valeur demandée avant de continuer.',
|
||
'en': 'Enter the requested value before continuing.',
|
||
},
|
||
'firmware_update': {
|
||
'fr': 'Mise à jour du firmware (à venir)',
|
||
'en': 'Firmware update (coming later)',
|
||
},
|
||
'forget_box': {'fr': 'Supprimer la box', 'en': 'Forget the box'},
|
||
'forget_guest_warning': {
|
||
'fr':
|
||
"Cette action supprime de ce téléphone les informations de connexion à la box ainsi que son association Bluetooth. Les données et les réglages de la box ne seront pas modifiés.",
|
||
'en':
|
||
'This deletes the box connection information and Bluetooth bond from this phone. The box data and settings will not be changed.',
|
||
},
|
||
'forget_admin_warning': {
|
||
'fr':
|
||
"Cette action supprime de ce téléphone les informations de connexion, l'identité administrateur et l'association Bluetooth. Sans réinitialisation, la configuration de la box reste inchangée et l'accès administrateur peut être définitivement perdu. L'option ci-dessous efface également tous les réglages, codes, tags, historiques, identités et liaisons Bluetooth de la box.",
|
||
'en':
|
||
'This deletes the connection information, administrator identity, and Bluetooth bond from this phone. Without a reset, the box configuration remains unchanged and administrator access may be permanently lost. The option below also erases every box setting, code, tag, history entry, identity, and Bluetooth bond.',
|
||
},
|
||
'also_reset_box': {
|
||
'fr': 'Réinitialiser également la box',
|
||
'en': 'Also factory-reset the box',
|
||
},
|
||
'box_reset_offline_unavailable': {
|
||
'fr':
|
||
'Action impossible hors connexion. Le bouton de réinitialisation interne reste disponible pour effacer les identités et les liaisons Bluetooth.',
|
||
'en': 'This action is unavailable while offline.',
|
||
},
|
||
'confirm': {'fr': 'Confirmer', 'en': 'Confirm'},
|
||
'administrator': {'fr': 'Administrateur', 'en': 'Administrator'},
|
||
'guest': {'fr': 'Invité', 'en': 'Guest'},
|
||
'backup_done': {
|
||
'fr': 'Sauvegarde chiffrée créée.',
|
||
'en': 'Encrypted backup created.',
|
||
},
|
||
'restore_done': {'fr': 'Sauvegarde restaurée.', 'en': 'Backup restored.'},
|
||
};
|
||
}
|