// ignore: unused_import import 'package:intl/intl.dart' as intl; import 'app_localizations.dart'; // ignore_for_file: type=lint /// The translations for French (`fr`). class L10nFr extends L10n { L10nFr([String locale = 'fr']) : super(locale); @override String get installerLoadsTitle => 'Rôles & appareils'; @override String get installerLoadsSubtitle => 'Ordre de service des charges pilotables'; @override String get loadsEmpty => 'Aucune charge pilotable déclarée sur cette installation.'; @override String loadsLoadError(String error) { return 'Lecture de la configuration impossible : $error'; } @override String get sectionUnclassified => 'Non classé'; @override String get domainEv => 'Véhicule électrique'; @override String get domainEcs => 'Eau chaude sanitaire'; @override String get domainHvac => 'Climatisation'; @override String get domainHeating => 'Chauffage'; @override String domainUnknown(String code) { return 'Domaine « $code »'; } @override String get adapterRelayRouter => 'Routeur de relais'; @override String get adapterEtmVariableLoad => 'Charge modulable'; @override String get adapterSgReady => 'SG-Ready'; @override String get adapterEvCharger => 'Borne de recharge'; @override String adapterUnknown(String code) { return 'Mécanisme « $code »'; } @override String get loadEnabled => 'Active'; @override String get loadDisabled => 'Exclue de l\'arbitrage'; @override String loadPriority(int rank) { return 'Rang $rank'; } @override String loadMinOn(int seconds) { return 'Maintien ON minimal : $seconds s'; } @override String loadMinOff(int seconds) { return 'Maintien OFF minimal : $seconds s'; } @override String loadRelayCount(int count) { String _temp0 = intl.Intl.pluralLogic( count, locale: localeName, other: '$count relais', one: '1 relais', ); return '$_temp0'; } @override String get loadMeterSlot => 'Compteur dédié : non rattachable'; @override String get orderNotGroupedTitle => 'Ordre non groupé'; @override String get orderNotGroupedBody => 'L\'ordre en place sur la box n\'est pas groupé par domaine : les charges d\'un même domaine ne se suivent pas. L\'ordre réel est affiché ci-dessous, tel que la box l\'applique.'; @override String get orderNotGroupedAction => 'Normaliser l\'ordre'; @override String get orderNotGroupedWarning => 'Normaliser modifiera l\'ordre d\'arbitrage réel de l\'installation. Aucune écriture ne part tant que vous n\'avez pas confirmé.'; @override String get orderNormalizeConfirm => 'Normaliser et enregistrer'; @override String get cancel => 'Annuler'; @override String get saveOrder => 'Enregistrer l\'ordre'; @override String get savePending => 'Envoi en cours…'; @override String get saveWaitingBox => 'En attente de confirmation de la box…'; @override String get saveConfirmed => 'Configuration confirmée par la box.'; @override String saveRejected(String reason) { return 'La box a refusé : $reason'; } @override String get saveDiverged => 'La box a enregistré un état différent de celui demandé. L\'affichage montre ce que la box applique réellement.'; @override String validationDuplicateId(String id) { return 'L\'identifiant de charge « $id » apparaît deux fois.'; } @override String validationThingClaimedTwice( String thingId, String first, String second, ) { return 'L\'appareil $thingId est commandé par deux charges actives, « $first » et « $second » : deux commandes contradictoires et une puissance comptée deux fois.'; } @override String get telemetryUnavailableTitle => 'Télémétrie indisponible'; @override String get telemetryUnavailableBody => 'Cette box n\'expose pas GetLoadTelemetry. Puissance allouée, verrous, disponibilité et motifs de décision ne sont pas lisibles depuis l\'app.'; @override String telemetryStale(int seconds) { return 'Données anciennes — dernier point il y a $seconds s'; } @override String get telemetryDegradedMode => 'Mode dégradé L2 — compteur muet, planification suspendue'; @override String get faultTitle => 'En défaut'; @override String get faultClearAction => 'Lever le défaut'; @override String get faultCleared => 'Défaut levé — confirmé par la télémétrie relue.'; @override String get faultClearNoop => 'Aucun défaut à lever sur cette charge.'; @override String faultUnknown(String code) { return 'Défaut « $code »'; } @override String decisionUnknown(String code, String params) { return 'Décision « $code »$params'; } @override String get telemetryTitle => 'Arbitrage en direct'; @override String get telemetryNeverRan => 'Aucun cycle d\'arbitrage depuis le démarrage du service.'; @override String telemetryLastCycle(int seconds) { return 'Dernier cycle il y a $seconds s'; } @override String get telemetryBudgetTitle => 'Budget de surplus du cycle'; @override String get telemetryBudgetAbsent => 'Aucun budget publié pour ce cycle : la planification est suspendue.'; @override String get budgetSurplus => 'Surplus entrant'; @override String get budgetEvReserved => 'Réservé au véhicule'; @override String get budgetRecredited => 'Recrédité'; @override String get budgetAllocated => 'Alloué'; @override String get budgetRemaining => 'Reliquat'; @override String watts(int watts) { final intl.NumberFormat wattsNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String wattsString = wattsNumberFormat.format(watts); return '$wattsString W'; } @override String telemetryAllocated(int watts) { final intl.NumberFormat wattsNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String wattsString = wattsNumberFormat.format(watts); return 'Alloué $wattsString W'; } @override String telemetryEvCharging(double current, int phases) { final intl.NumberFormat currentNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String currentString = currentNumberFormat.format(current); return 'Borne : en charge, $currentString A sur $phases phase(s)'; } @override String get telemetryEvIdle => 'Borne : ne charge pas'; @override String get telemetryEvUnplugged => 'Borne : aucun véhicule branché'; @override String get telemetryEvStateUnknown => 'Borne : état non publié ce cycle'; @override String get telemetryFundedByGrid => 'Financée au réseau (échéance ou tarif dynamique) — hors budget de surplus'; @override String get telemetryNotArbitrated => 'Non arbitrée — absente du dernier cycle publié'; @override String lockMinOn(int seconds) { return 'Maintien ON — $seconds s restantes'; } @override String lockMinOff(int seconds) { return 'Maintien OFF — $seconds s restantes'; } @override String lockMinStateHold(int seconds) { return 'Maintien d\'état — $seconds s restantes'; } @override String lockUnknown(String kind, int seconds) { return 'Verrou « $kind » — $seconds s restantes'; } @override String get lockAsOfCycle => 'au dernier cycle'; @override String mechanismRelayStage(int stage, int max) { final intl.NumberFormat stageNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String stageString = stageNumberFormat.format(stage); final intl.NumberFormat maxNumberFormat = intl.NumberFormat.decimalPattern( localeName, ); final String maxString = maxNumberFormat.format(max); return 'Palier $stageString W sur $maxString W'; } @override String mechanismVariableSetpoint(int setpoint, int percent) { final intl.NumberFormat setpointNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String setpointString = setpointNumberFormat.format(setpoint); return 'Consigne $setpointString W ($percent %)'; } @override String mechanismSgReadyState(int state, int estimated) { final intl.NumberFormat estimatedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String estimatedString = estimatedNumberFormat.format(estimated); return 'État SG-Ready $state — estimation $estimatedString W'; } @override String mechanismEvCharger(double current, int phases) { final intl.NumberFormat currentNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String currentString = currentNumberFormat.format(current); return '$currentString A sur $phases phase(s)'; } @override String mechanismUnknown(String kind) { return 'Mécanisme « $kind »'; } @override String get decisionEvSurplus => 'Véhicule rechargé sur le surplus photovoltaïque.'; @override String get decisionEvSpotMarket => 'Véhicule rechargé sur un créneau tarifaire favorable.'; @override String get decisionEvDeadline => 'Véhicule prioritaire : l\'échéance approche.'; @override String get decisionEvEcoMin => 'Pas de surplus : le courant minimum est maintenu.'; @override String get decisionEvIdle => 'Pas de surplus : la recharge est suspendue.'; @override String decisionLoadUnavailable(int frozen) { final intl.NumberFormat frozenNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String frozenString = frozenNumberFormat.format(frozen); return 'Charge en défaut : aucune commande n\'est émise, et $frozenString W restent comptés au budget.'; } @override String decisionLockMinOn(int applied, int budget) { final intl.NumberFormat appliedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String appliedString = appliedNumberFormat.format(applied); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Le maintien ON a relevé la consigne à $appliedString W ; le budget en payait $budgetString W.'; } @override String decisionLockMinOff(int requested, int budget) { final intl.NumberFormat requestedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String requestedString = requestedNumberFormat.format(requested); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Le maintien OFF interdit l\'enclenchement ; le budget payait pourtant $requestedString W sur $budgetString W disponibles.'; } @override String decisionLockMinOffCapped(int applied, int requested, int budget) { final intl.NumberFormat appliedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String appliedString = appliedNumberFormat.format(applied); final intl.NumberFormat requestedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String requestedString = requestedNumberFormat.format(requested); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Le maintien OFF plafonne la consigne à $appliedString W ; $requestedString W étaient demandés sur $budgetString W de budget.'; } @override String decisionSurplusSetpoint(int setpoint, int budget) { final intl.NumberFormat setpointNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String setpointString = setpointNumberFormat.format(setpoint); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Consigne de $setpointString W servie par le surplus ($budgetString W de budget).'; } @override String decisionSurplusSetpointStepped(int setpoint, int budget) { final intl.NumberFormat setpointNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String setpointString = setpointNumberFormat.format(setpoint); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Consigne de $setpointString W servie par le surplus, arrondie sur un palier déclaré ($budgetString W de budget).'; } @override String decisionSurplusInsufficient(int budget) { final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Aucun surplus à distribuer ($budgetString W) — rien n\'est commandé.'; } @override String decisionLockMinStateHold(int state) { return 'État $state maintenu par protection anti court-cycle.'; } @override String decisionSgForced(int estimated, int budget) { final intl.NumberFormat estimatedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String estimatedString = estimatedNumberFormat.format(estimated); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Pompe à chaleur en état 4 (forcé) — estimation $estimatedString W sur $budgetString W de budget.'; } @override String decisionSgRecommended(int estimated, int budget) { final intl.NumberFormat estimatedNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String estimatedString = estimatedNumberFormat.format(estimated); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Pompe à chaleur en état 3 (recommandation) — estimation $estimatedString W sur $budgetString W de budget.'; } @override String decisionSgNormal(int budget) { final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); return 'Aucun surplus ($budgetString W) — pompe à chaleur en état 2 (normal, sans consigne).'; } @override String decisionBelowMinPower(int budget, int min) { final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); final intl.NumberFormat minNumberFormat = intl.NumberFormat.decimalPattern( localeName, ); final String minString = minNumberFormat.format(min); return 'Budget de $budgetString W sous le premier palier ($minString W) — rien n\'est commandé, le budget passe à la charge suivante.'; } @override String decisionBelowMinPowerState(int budget, int state, int min) { final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); final intl.NumberFormat minNumberFormat = intl.NumberFormat.decimalPattern( localeName, ); final String minString = minNumberFormat.format(min); return 'Budget de $budgetString W sous l\'état $state ($minString W estimés) — maintien en état 2, le budget passe à la charge suivante.'; } @override String decisionEvGridStart(int grid, int budget, int floor) { final intl.NumberFormat gridNumberFormat = intl.NumberFormat.decimalPattern( localeName, ); final String gridString = gridNumberFormat.format(grid); final intl.NumberFormat budgetNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String budgetString = budgetNumberFormat.format(budget); final intl.NumberFormat floorNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String floorString = floorNumberFormat.format(floor); return 'Démarrage soutiré : $gridString W achetés au réseau pour compléter les $budgetString W de surplus et atteindre le plancher de $floorString W.'; } @override String decisionPhaseLimit(int limit, int required) { final intl.NumberFormat limitNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String limitString = limitNumberFormat.format(limit); final intl.NumberFormat requiredNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String requiredString = requiredNumberFormat.format(required); return 'Limite de phase atteinte : $limitString W disponibles pour $requiredString W exigés — ce n\'est pas le surplus qui manque.'; } @override String decisionBatteryReserveWithheld(int withheld, int soc, int seuil) { final intl.NumberFormat withheldNumberFormat = intl.NumberFormat.decimalPattern(localeName); final String withheldString = withheldNumberFormat.format(withheld); return '$withheldString W de surplus retenus par la réserve batterie ($soc % sous le seuil de $seuil %) — il y a du surplus, mais une règle interdit de le distribuer.'; } @override String decisionBatteryReserve(int soc, int seuil) { return 'Budget annulé par la réserve batterie ($soc % sous le seuil de $seuil %) — il y a du surplus, mais une règle interdit de le distribuer.'; } @override String get decisionBatteryReserveShort => 'Budget annulé par la réserve batterie — il y a du surplus, mais une règle interdit de le distribuer.'; @override String get decisionDegradedL2 => 'Consigne de repli : le compteur est muet et le watchdog a suspendu la planification.'; @override String get decisionSafeStateRelay => 'État sûr avant retrait : tous les relais sont ouverts.'; @override String get decisionSafeStateSetpoint => 'État sûr avant retrait : consigne ramenée à 0 W.'; @override String get decisionSafeStateSgReady => 'État sûr avant retrait : état 2 (normal), jamais le blocage.'; @override String get faultWriteFailed => 'Échec d\'écriture : l\'échelle de commande est épuisée, plus aucune commande n\'est émise tant que le défaut n\'est pas levé.'; @override String get faultThingMissing => 'L\'appareil commandé n\'existe plus dans nymea — retiré, ou jamais réinstallé après un remplacement. La charge, elle, est toujours déclarée : c\'est pour ça qu\'elle apparaît ici.'; @override String get faultThingMissingAction => 'Rien à lever ici : le défaut ne partira pas tant qu\'aucun appareil ne répond. Réinstallez-le dans nymea, ou retirez cette charge de la configuration.'; @override String get faultUnusableEncoding => 'Encodage SG-Ready inexploitable : l\'état 2 ne peut pas être exprimé, cette pompe à chaleur n\'est pas pilotable.'; @override String get faultClearPending => 'Levée demandée — en attente de la télémétrie…'; @override String get faultClearStillFaulty => 'La charge est toujours en défaut après la levée.'; @override String faultClearRejected(String reason) { return 'La box a refusé la levée : $reason'; } @override String get faultClearHint => 'La levée est une action délibérée : le défaut ne se lève jamais tout seul.'; @override String get domainBattery => 'Batterie'; @override String domainAssignTitle(String label) { return 'Classer « $label »'; } @override String get domainAssignAction => 'Changer de domaine'; @override String get domainAssignNone => 'Retirer du classement'; @override String get domainAssignHint => 'Le domaine est une intention déclarée par l\'installateur. L\'arbitre ne la lit pas : elle ne sert qu\'à grouper l\'ordre de service.'; @override String localeRequested(String requested, String effective) { return 'Locale demandée : $requested · retenue par la box : $effective'; } }