1264 lines
72 KiB
JSON
1264 lines
72 KiB
JSON
{
|
||
"meta": {
|
||
"code": "en",
|
||
"name": "English",
|
||
"native_name": "English",
|
||
"locale": "en-GB"
|
||
},
|
||
"translations": {
|
||
"meta.description": "Local GREE air conditioner controller",
|
||
"status.connecting": "Connecting…",
|
||
"status.connected": "Connected",
|
||
"status.disconnected": "Disconnected",
|
||
"status.connectionError": "Connection error",
|
||
"status.online": "Online",
|
||
"status.offline": "Offline",
|
||
"controls.language": "Language",
|
||
"controls.theme": "Theme",
|
||
"theme.system": "System",
|
||
"theme.light": "Light",
|
||
"theme.dark": "Dark",
|
||
"nav.navigation": "Navigation",
|
||
"nav.dashboard": "Dashboard",
|
||
"nav.devices": "Devices",
|
||
"nav.zones": "Zones",
|
||
"nav.history": "History",
|
||
"nav.more": "More",
|
||
"nav.schedules": "Schedules",
|
||
"nav.automations": "Automations",
|
||
"nav.settings": "Settings",
|
||
"nav.logs": "Events",
|
||
"nav.logsAndEvents": "Events and logs",
|
||
"actions.refresh": "Refresh",
|
||
"actions.discover": "Discover",
|
||
"actions.discovering": "Searching…",
|
||
"actions.add": "Add",
|
||
"actions.show": "Show",
|
||
"actions.save": "Save",
|
||
"actions.cancel": "Cancel",
|
||
"actions.edit": "Edit",
|
||
"actions.delete": "Delete",
|
||
"actions.read": "Read",
|
||
"actions.bind": "Bind",
|
||
"actions.noChange": "No change",
|
||
"actions.turnOn": "Turn on",
|
||
"actions.turnOff": "Turn off",
|
||
"dashboard.home": "Home",
|
||
"dashboard.title": "Comfort under control",
|
||
"dashboard.loading": "Loading devices…",
|
||
"dashboard.quickControl": "Manual control",
|
||
"dashboard.summary": "{online} of {total} devices online{active}.",
|
||
"dashboard.summaryActive": ", {count} running",
|
||
"dashboard.empty": "No devices. Start discovery or add a device manually.",
|
||
"dashboard.metricOnline": "Online",
|
||
"dashboard.metricActive": "Active",
|
||
"dashboard.metricDemand": "Zones requesting",
|
||
"devices.lan": "LAN network",
|
||
"devices.addManual": "Add manually",
|
||
"devices.add": "Add device",
|
||
"devices.ipAddress": "IP address",
|
||
"devices.protocol": "Protocol",
|
||
"devices.keyOptional": "Key (optional)",
|
||
"devices.keyPlaceholder": "Leave empty for automatic bind",
|
||
"devices.simulated": "Simulated device",
|
||
"devices.simulator": "simulator",
|
||
"devices.power": "Power",
|
||
"devices.currentTemperature": "Temperature",
|
||
"common.clickTemperatureToEdit": "Click the temperature to type a value",
|
||
"common.targetTemperature": "Target temperature",
|
||
"devices.outdoor": "outside",
|
||
"devices.quiet": "Quiet",
|
||
"devices.swing": "Swing",
|
||
"devices.turbo": "Turbo",
|
||
"devices.emptyTitle": "No devices",
|
||
"devices.emptyText": "Use Discover while the controller is on the same LAN.",
|
||
"devices.readDone": "Device state updated",
|
||
"devices.bound": "Device bound",
|
||
"devices.added": "Device added",
|
||
"dashboard.manualControlHint": "Direct GREE control: power, temperature, mode, fan and supported unit functions.",
|
||
"devices.technicalDescription": "Technical configuration and diagnostics only. Current operating settings are available in Manual control.",
|
||
"devices.technicalUnit": "Technical unit",
|
||
"devices.address": "Address",
|
||
"devices.modelFirmware": "Model / firmware",
|
||
"devices.lastSeen": "Last response",
|
||
"devices.communicationFailures": "Communication failures",
|
||
"devices.lastError": "Last error",
|
||
"devices.readStatus": "Read status",
|
||
"devices.technicalConfig": "Technical configuration",
|
||
"devices.diagnostics": "Diagnostics",
|
||
"devices.ping": "Ping",
|
||
"devices.pingOpen": "Open live ping view",
|
||
"devices.pingLive": "Live ping",
|
||
"devices.pingHint": "Measures a minimal GREE round-trip without changing device state, error counters or automation ownership. The chart refreshes while monitoring is enabled.",
|
||
"devices.pingAll": "Ping all units",
|
||
"devices.pingStart": "Start",
|
||
"devices.pingStop": "Stop",
|
||
"devices.pingCurrent": "Current",
|
||
"devices.pingAverage": "Average",
|
||
"devices.pingMin": "Min",
|
||
"devices.pingMax": "Max",
|
||
"devices.pingSamples": "Samples",
|
||
"devices.pingNoSamples": "No samples yet. Start monitoring.",
|
||
"devices.pingFailed": "No response",
|
||
"devices.pingResponding": "Responding",
|
||
"devices.manualDeviceDisabled": "Unit is technically disabled",
|
||
"devices.manualNoCommunication": "No communication with the unit",
|
||
"devices.manualCommunicationProblem": "The last communication with the unit failed",
|
||
"devices.manualDisabledZoneTitle": "Warning: zone is disabled",
|
||
"devices.manualDisabledZoneWarning": "This unit belongs to disabled zone “{zone}”. Manual control is still available, but the command is sent directly outside that zone automation.",
|
||
"devices.manualDisabledZoneConfirm": "Zone “{zone}” is disabled. This command will be sent directly to the unit, outside zone automation. Automation will stay disabled until it is enabled / resumed again. Send the command?",
|
||
"devices.disabledZoneTechnicalOnly": "This zone is disabled. Explicit direct operation requires confirmation in Manual control.",
|
||
"zones.automation": "Automation",
|
||
"zones.new": "New zone",
|
||
"zones.description": "Zones define thermostat logic and sensor configuration. Use thermostats on the Dashboard for current temperature, preset and mode changes.",
|
||
"zones.hysteresis": "Hysteresis °C",
|
||
"zones.separateHysteresis": "Set heating and cooling separately",
|
||
"zones.coolHysteresis": "Cooling hysteresis °C",
|
||
"zones.heatHysteresis": "Heating hysteresis °C",
|
||
"zones.source": "Temperature strategy",
|
||
"zones.greeSensor": "GREE only",
|
||
"zones.combinedSensor": "GREE + room sensor",
|
||
"zones.externalSensor": "Room sensor only",
|
||
"zones.minOn": "Min. ON (s)",
|
||
"zones.minOff": "Min. OFF (s)",
|
||
"zones.greeSource": "GREE sensor",
|
||
"zones.combinedSource": "GREE + room sensor",
|
||
"zones.externalSource": "room sensor",
|
||
"zones.measurement": "Control temperature",
|
||
"zones.demand": "Demand",
|
||
"zones.emptyTitle": "No zones",
|
||
"zones.emptyText": "Add a zone to control temperature automatically.",
|
||
"zones.roomSensorEntity": "Room sensor entity_id",
|
||
"zones.roomSensorWeight": "Room sensor weight %",
|
||
"zones.maxDifference": "Max. sensor difference °C",
|
||
"zones.sensorHelp": "This sensor belongs only to this zone. If it becomes unavailable, the controller automatically falls back to the GREE sensor.",
|
||
"zones.greeTemp": "GREE",
|
||
"zones.externalTemp": "Room",
|
||
"zones.usedSource": "used",
|
||
"zones.sourceDevice": "GREE",
|
||
"zones.sourceExternal": "room sensor",
|
||
"zones.sourceCombined": "combined",
|
||
"zones.sourceFallback": "GREE fallback",
|
||
"zones.sourceDiscrepancy": "GREE fallback: sensor mismatch",
|
||
"zones.sourceUnavailable": "unavailable",
|
||
"schedules.calendar": "Calendar",
|
||
"schedules.weekdays": "Weekdays",
|
||
"schedules.crossMidnight": "Intervals crossing midnight are supported",
|
||
"schedules.emptyTitle": "No schedules",
|
||
"schedules.emptyText": "Set a temperature by day and time.",
|
||
"automations.rules": "Rules",
|
||
"automations.namePlaceholder": "Emergency cooling",
|
||
"automations.trigger": "Trigger",
|
||
"automations.tempAbove": "Temperature above",
|
||
"automations.tempBelow": "Temperature below",
|
||
"automations.time": "Time",
|
||
"automations.measurementDevice": "Measurement device",
|
||
"automations.thresholdC": "Threshold °C",
|
||
"automations.action": "Action",
|
||
"automations.triggerAt": "at {time}",
|
||
"automations.triggerAbove": "above {temperature}",
|
||
"automations.triggerBelow": "below {temperature}",
|
||
"automations.triggerSummary": "Trigger {trigger} · action: {device}",
|
||
"automations.last": "Last",
|
||
"automations.emptyTitle": "No automations",
|
||
"automations.emptyText": "Add a temperature or time rule.",
|
||
"history.measurements": "Measurements",
|
||
"history.title": "Climate history",
|
||
"history.6h": "6 hours",
|
||
"history.24h": "24 hours",
|
||
"history.7d": "7 days",
|
||
"history.30d": "30 days",
|
||
"history.noData": "No measurements for the selected period",
|
||
"settings.system": "System",
|
||
"settings.controller": "Controller",
|
||
"settings.clientId": "Client identifier",
|
||
"settings.pollInterval": "Poll interval (s)",
|
||
"settings.zoneInterval": "Zone interval (s)",
|
||
"settings.broadcast": "Broadcast address",
|
||
"settings.discoveryTimeout": "Discovery timeout (ms)",
|
||
"settings.simulationMode": "Simulation mode",
|
||
"settings.haTokenKeep": "Leave empty to keep the saved token",
|
||
"settings.haTokenSaved": "Token saved — leave empty to keep it",
|
||
"settings.haLongLivedToken": "Long-Lived Access Token",
|
||
"settings.defaultEntity": "Connection test entity_id",
|
||
"settings.defaultEntityHint": "This entity is used by the Home Assistant connection test when no other entity is specified. It is not automatically used as a zone temperature source.",
|
||
"settings.testHa": "Test HA",
|
||
"settings.systemState": "System status",
|
||
"settings.version": "Version",
|
||
"settings.uptime": "Uptime",
|
||
"settings.apiAuth": "API authentication",
|
||
"settings.enabled": "enabled",
|
||
"settings.disabled": "disabled",
|
||
"logs.diagnostics": "Diagnostics",
|
||
"logs.emptyTitle": "No events",
|
||
"logs.emptyText": "The event log is empty.",
|
||
"logs.silent": "SILENT",
|
||
"logs.silentHint": "No notification was sent.",
|
||
"logs.silentAlertTypeDisabled": "No notification was sent: this alert type is disabled.",
|
||
"logs.silentNotificationsDisabled": "No notification was sent: notifications are disabled.",
|
||
"logs.silentModeFiltered": "No notification was sent: the notification mode filtered this event.",
|
||
"logs.silentCooldown": "No notification was sent: notification cooldown is active.",
|
||
"common.name": "Name",
|
||
"common.zone": "Zone",
|
||
"common.device": "Device",
|
||
"common.mode": "Mode",
|
||
"common.target": "Target",
|
||
"common.targetC": "Target °C",
|
||
"common.temperature": "Temperature",
|
||
"common.temperatureC": "Temperature °C",
|
||
"common.schedule": "Schedule",
|
||
"common.automation": "Automation",
|
||
"common.enabled": "Enabled",
|
||
"common.disabled": "Disabled",
|
||
"common.active": "Active",
|
||
"common.from": "From",
|
||
"common.to": "To",
|
||
"common.power": "Power",
|
||
"common.on": "ON",
|
||
"common.off": "OFF",
|
||
"common.noDevice": "No device",
|
||
"common.noZone": "No zone",
|
||
"common.cooldown": "Cooldown",
|
||
"common.cooldownSeconds": "Cooldown (s)",
|
||
"common.removed": "Removed",
|
||
"common.updated": "Data refreshed",
|
||
"common.saved": "Saved",
|
||
"placeholder.livingRoom": "Living room",
|
||
"placeholder.night": "Night",
|
||
"mode.auto": "Auto",
|
||
"mode.cool": "Cooling",
|
||
"mode.dry": "Dry",
|
||
"mode.fan": "Fan",
|
||
"mode.heat": "Heating",
|
||
"fan.auto": "Auto",
|
||
"fan.low": "Low",
|
||
"fan.mediumLow": "Medium-low",
|
||
"fan.medium": "Medium",
|
||
"fan.mediumHigh": "Medium-high",
|
||
"fan.high": "High",
|
||
"auth.required": "Authentication required",
|
||
"auth.token": "Access token",
|
||
"auth.connect": "Connect",
|
||
"auth.invalid": "Invalid access token",
|
||
"error.http": "HTTP error {status}",
|
||
"confirm.delete": "Delete {label}?",
|
||
"label.device": "device",
|
||
"label.zone": "zone",
|
||
"label.schedule": "schedule",
|
||
"label.automation": "automation",
|
||
"toast.found": "Found: {count}",
|
||
"toast.haTemperature": "Home Assistant: {temperature}°C",
|
||
"day.1": "Mon",
|
||
"day.2": "Tue",
|
||
"day.3": "Wed",
|
||
"day.4": "Thu",
|
||
"day.5": "Fri",
|
||
"day.6": "Sat",
|
||
"day.7": "Sun",
|
||
"settings.haSensorInput": "Home Assistant sensor input",
|
||
"settings.haSensorInputHint": "Optional. Used only when a room zone reads an external Home Assistant temperature sensor.",
|
||
"settings.haIntegrationAccess": "Home Assistant integration access",
|
||
"settings.haIntegrationHint": "Create a controller token and paste it into the GREE Controller integration in Home Assistant.",
|
||
"settings.newToken": "Create new token",
|
||
"settings.noTokens": "No integration tokens",
|
||
"settings.noTokensHint": "Create a token before adding GREE Controller to Home Assistant.",
|
||
"settings.tokenCreated": "Token created",
|
||
"settings.tokenCreatedHint": "Copy this token now. It will not be shown again.",
|
||
"settings.created": "Created",
|
||
"actions.copy": "Copy",
|
||
"actions.revoke": "Revoke",
|
||
"actions.done": "Done",
|
||
"confirm.revokeToken": "Revoke this Home Assistant access token?",
|
||
"toast.tokenCreated": "Home Assistant access token created",
|
||
"toast.tokenCopied": "Token copied",
|
||
"toast.tokenRevoked": "Token revoked",
|
||
"devices.protocolAuto": "Auto (V1 + V2)",
|
||
"devices.rename": "Name / protocol",
|
||
"devices.protocolChangeHint": "Changing protocol clears the saved device key. “Save and check connection” immediately performs the required bind and test.",
|
||
"devices.saveAndCheck": "Save and check connection",
|
||
"devices.connectionCheckOk": "Connection works · response {ms} ms",
|
||
"devices.connectionCheckFailed": "Configuration was saved, but the connection test failed: {error}",
|
||
"devices.savedAndChecked": "Saved and connection confirmed",
|
||
"devices.savedCheckFailed": "Configuration saved, but the connection test failed",
|
||
"discovery.title": "Discover GREE devices",
|
||
"discovery.help": "Auto searches both AES-ECB and AES-GCM devices. Multiple passes improve discovery when several Wi-Fi modules answer the same broadcast.",
|
||
"discovery.protocol": "Discovery protocol",
|
||
"discovery.passes": "Scan passes",
|
||
"discovery.timeout": "Total scan time (ms)",
|
||
"zones.quickHint": "Quick target and mode control",
|
||
"actions.later": "Later",
|
||
"discovery.nameDevices": "Name discovered devices",
|
||
"discovery.nameDevicesHelp": "Give each new unit a friendly room name. The technical model and MAC remain available in diagnostics.",
|
||
"dashboard.thermostats": "Thermostats",
|
||
"common.unavailable": "Unavailable",
|
||
"mode.off": "Off",
|
||
"house.seasonMode": "Home climate mode",
|
||
"house.smartThermostat": "Smart thermostat",
|
||
"house.setpointStrategy": "Heating or cooling selects the automation direction. After resume, a zone with no active schedule, manual target, temporary session or other explicit control stays OFF. “Do not control” leaves devices untouched.",
|
||
"house.outdoor": "Outdoor",
|
||
"house.modeUpdated": "Home climate mode updated",
|
||
"zones.modePolicy": "Mode policy",
|
||
"zones.modePolicyHint": "If this zone should use the global Heating/Cooling mode selected in GREE Controller, leave “Follow global mode” unchanged. “Cooling only” or “Heating only” forces a fixed mode only for this zone.",
|
||
"zones.followHouse": "Follow global mode",
|
||
"zones.followHouseShort": "Global",
|
||
"zones.globalModeUnavailable": "Select global Heating or Cooling first",
|
||
"zones.profileTemperatures": "Comfort / sleep / away temperatures",
|
||
"zones.minAdjust": "Minimum adjustment interval (s)",
|
||
"zones.standbyOffset": "Standby setpoint offset °C",
|
||
"zones.smartFan": "Smart fan assist",
|
||
"zones.deviceTarget": "AC target",
|
||
"zones.overrideUntil": "Manual until",
|
||
"zones.scheduleControl": "Schedule control",
|
||
"zones.manualNoBoundary": "Manual · no next transition",
|
||
"zones.requesting": "Demand active",
|
||
"zones.satisfied": "Target reached",
|
||
"zones.quickHintSmart": "Quick changes last until the next schedule transition; without a schedule they stay active.",
|
||
"preset.auto": "Auto",
|
||
"preset.comfort": "Comfort",
|
||
"preset.sleep": "Sleep",
|
||
"preset.away": "Away",
|
||
"preset.custom": "Custom",
|
||
"schedules.quickSetup": "Quick schedule setup",
|
||
"schedules.quickSetupHint": "Choose a zone and a ready-made daily rhythm. You can edit every generated entry afterwards.",
|
||
"schedules.templateFamily": "Family",
|
||
"schedules.templateChild": "Child room",
|
||
"schedules.templateBedroom": "Bedroom",
|
||
"schedules.templateWorkday": "Workday",
|
||
"schedules.templateAlways": "Always comfort",
|
||
"schedules.chooseZone": "Choose a zone first",
|
||
"schedules.templateApplied": "Schedule preset applied",
|
||
"schedules.profile": "Profile",
|
||
"settings.outdoorEntity": "Outdoor temperature entity_id",
|
||
"settings.outdoorAssist": "Use outdoor temperature as smart-control assist",
|
||
"settings.allowInvalidTls": "Allow invalid/self-signed HTTPS certificate",
|
||
"settings.allowInvalidTlsHint": "Use only for a trusted local Home Assistant server, for example https://192.168.50.25.",
|
||
"zones.sleepNow": "Sleep",
|
||
"house.autoAll": "Auto schedule",
|
||
"house.comfortAll": "Comfort all",
|
||
"house.sleepAll": "Sleep all",
|
||
"house.awayAll": "Away all",
|
||
"house.presetUpdated": "Home preset updated",
|
||
"schedules.replaceConfirm": "Replace the current schedule for this zone with the selected preset? You can edit every generated entry afterwards.",
|
||
"automations.smartHintTitle": "Use thermostat presets for daily comfort",
|
||
"automations.smartHint": "Schedules and zone presets handle normal heating/cooling automatically. Keep automations for special exceptions so they do not fight the thermostat.",
|
||
"history.allZones": "All zones",
|
||
"history.temperatureOverview": "Temperature overview",
|
||
"history.temperatureOverviewHint": "GREE, room sensor, control temperature, targets and outdoor temperature.",
|
||
"history.operationOverview": "Targets and operation",
|
||
"history.operationOverviewHint": "Zone targets, compressor demand, power and fan activity over the same period.",
|
||
"history.greeSensor": "GREE sensor",
|
||
"history.roomSensor": "Room sensor",
|
||
"history.controlTemperature": "Control temperature",
|
||
"history.comfortTarget": "Comfort target",
|
||
"history.deviceSetpoint": "Device setpoint",
|
||
"history.outdoorTemperature": "Outdoor temperature",
|
||
"history.fanSpeed": "Fan speed",
|
||
"history.demand": "Demand",
|
||
"history.power": "Power",
|
||
"history.targetShort": "Target",
|
||
"history.sensor": "Indoor unit",
|
||
"history.homeAssistant": "Home Assistant",
|
||
"history.assist": "Outdoor assist",
|
||
"history.tabOverview": "Overview",
|
||
"history.tabZones": "Zones",
|
||
"history.tabDevices": "GREE devices",
|
||
"history.tabSensors": "HA sensors",
|
||
"history.tabCustom": "Custom chart",
|
||
"history.overviewHint": "All rooms, units and available outdoor measurements in one place.",
|
||
"history.customHint": "Compose your own chart from GREE, zone and Home Assistant data.",
|
||
"history.allDevices": "All GREE devices",
|
||
"history.allSensors": "All HA sensors",
|
||
"history.haSensor": "HA sensor",
|
||
"history.deviceSamples": "GREE samples",
|
||
"history.zoneSamples": "Zone samples",
|
||
"history.haSamples": "HA samples",
|
||
"history.greeHistory": "Device polling history",
|
||
"history.zoneHistory": "Thermostat history",
|
||
"history.haHistory": "External sensor history",
|
||
"history.allGreeIndoor": "All GREE indoor temperatures",
|
||
"history.allGreeIndoorHint": "Indoor temperature reported by every GREE unit, independent of zones.",
|
||
"history.allOutdoor": "Outdoor temperatures",
|
||
"history.allOutdoorHint": "Outdoor values reported by GREE units plus the optional Home Assistant outdoor sensor.",
|
||
"history.allZoneControl": "All zone control temperatures",
|
||
"history.allZoneControlHint": "The temperature actually used by the thermostat in every zone.",
|
||
"history.greeOutdoor": "GREE outdoor",
|
||
"history.deviceIndoor": "GREE indoor temperature",
|
||
"history.deviceIndoorHint": "Indoor sensor history for the selected unit or all units.",
|
||
"history.deviceOutdoor": "GREE outdoor temperature",
|
||
"history.deviceOutdoorHint": "Outdoor temperature reported by compatible GREE units. Units without this sensor are omitted.",
|
||
"history.deviceTargets": "GREE target temperatures",
|
||
"history.deviceTargetsHint": "Setpoints sent to each GREE unit over time.",
|
||
"history.deviceTarget": "Device target",
|
||
"history.indoorTemperature": "Indoor temperature",
|
||
"history.haSensors": "Home Assistant temperatures",
|
||
"history.haSensorsHint": "Room and outdoor temperature entities read from Home Assistant.",
|
||
"history.customTitle": "Chart composer",
|
||
"history.customDescription": "Mix any GREE, zone or Home Assistant temperature series. Save it locally or copy a shareable URL.",
|
||
"history.addSeries": "Add series",
|
||
"history.noCustomSeries": "Add at least one series to the chart.",
|
||
"history.chartName": "Chart name",
|
||
"history.copyLink": "Copy link",
|
||
"history.series": "series",
|
||
"history.noSavedCharts": "No saved custom charts yet.",
|
||
"history.customChart": "Custom climate chart",
|
||
"history.customChartHint": "Your selected data sources on one timeline.",
|
||
"history.chartSaved": "Custom chart saved",
|
||
"history.linkCopied": "Chart link copied",
|
||
"toast.successTitle": "Done",
|
||
"toast.errorTitle": "Something went wrong",
|
||
"plan.eyebrow": "Control plan",
|
||
"plan.title": "What happens next",
|
||
"plan.house": "Whole house",
|
||
"plan.houseSummary": "{zones} enabled zones · {demand} requesting action",
|
||
"plan.noEvents": "No scheduled changes in the next days",
|
||
"plan.loading": "Loading current automation plan…",
|
||
"plan.rules": "Extra automations",
|
||
"plan.ruleCount": "{count} active rules",
|
||
"plan.event": "Change",
|
||
"plan.groupSummary": "Group zones: {zones} · requesting action: {demand}",
|
||
"plan.groupOff": "Group off — group units are powered down and group ownership is released.",
|
||
"zones.enable": "Enable zone",
|
||
"zones.disable": "Disable zone",
|
||
"history.90d": "90 days",
|
||
"history.1y": "1 year",
|
||
"settings.metrics": "Metrics storage",
|
||
"settings.retentionDays": "Local retention (days)",
|
||
"settings.compaction": "Compact old metrics",
|
||
"settings.compactionHint": "SQLite keeps recent data locally and compacts older samples to the resolution used by charts.",
|
||
"settings.greeCommands": "GREE commands",
|
||
"settings.greeTraffic": "GREE traffic",
|
||
"settings.greeTrafficHint": "Live counters of UDP frames received from configured air conditioners since controller startup.",
|
||
"settings.receivedFramesTotal": "Received frames total",
|
||
"settings.receivedFramesDevices": "Air conditioners",
|
||
"settings.suppressBeep": "Try to suppress command beeps",
|
||
"settings.suppressBeepHint": "Only changed properties are sent. Buzzer suppression is also requested when supported by the unit firmware.",
|
||
"settings.influx": "Long-term InfluxDB history",
|
||
"settings.influxHint": "Optional archive for older history. InfluxDB 1.x and 2.x are supported. Samples older than the handoff age are removed from SQLite only after a successful archive write.",
|
||
"settings.influxEnabled": "Enable InfluxDB archive",
|
||
"settings.influxVersion": "InfluxDB version",
|
||
"settings.influxThreshold": "Use archive for history older than (days)",
|
||
"settings.influxDatabase": "Database",
|
||
"settings.influxUsername": "Username",
|
||
"settings.influxPassword": "Password",
|
||
"settings.influxOrg": "Organization",
|
||
"settings.influxBucket": "Bucket",
|
||
"settings.influxToken": "Token",
|
||
"settings.secretKeep": "Leave empty to keep saved secret",
|
||
"settings.secretSaved": "Secret already saved — leave empty to keep it",
|
||
"settings.debug": "On-screen debug",
|
||
"settings.debugOverlay": "Show debug window on every page",
|
||
"settings.debugGreeFrames": "Include GREE protocol frames",
|
||
"settings.backup": "Configuration backup",
|
||
"settings.backupHint": "Export/import application configuration. Exported files can contain GREE device keys plus Home Assistant, InfluxDB and notification secrets; metrics and API access tokens are not included.",
|
||
"settings.export": "Export settings",
|
||
"settings.import": "Import settings",
|
||
"settings.importConfirm": "Replace the current application configuration with this file? Existing metrics and API access tokens will be kept.",
|
||
"debug.title": "Live debug",
|
||
"debug.clear": "Clear",
|
||
"debug.apiAndGree": "Requests, events + GREE frames",
|
||
"debug.apiOnly": "Requests and application events",
|
||
"debug.empty": "No debug events yet.",
|
||
"toast.exported": "Configuration exported",
|
||
"toast.imported": "Configuration imported",
|
||
"nav.simulation": "Simulator",
|
||
"simulation.eyebrow": "Simulator",
|
||
"simulation.title": "Automation simulator",
|
||
"simulation.description": "Live preview of the thermostat and automation logic. The flow board shows how sensor readings, schedules, night mode and thermostat decisions become commands sent to each GREE unit.",
|
||
"simulation.timelineEyebrow": "Timeline",
|
||
"simulation.timelineTitle": "What will happen next",
|
||
"simulation.zoneEyebrow": "Zones",
|
||
"simulation.zoneTitle": "Thermostat decision flow",
|
||
"simulation.rulesEyebrow": "Rules",
|
||
"simulation.rulesTitle": "Automation rules",
|
||
"simulation.houseMode": "House mode",
|
||
"simulation.strategy": "Strategy: {strategy}",
|
||
"simulation.outdoor": "Outdoor",
|
||
"simulation.generatedAt": "Generated: {time}",
|
||
"simulation.activeZones": "Active zones",
|
||
"simulation.requestingZones": "Zones with demand: {count}",
|
||
"simulation.rulesLabel": "Active rules",
|
||
"simulation.eventsQueued": "Queued events: {count}",
|
||
"simulation.house": "House",
|
||
"simulation.stepRoom": "Room reading",
|
||
"simulation.stepTarget": "Target",
|
||
"simulation.stepDecision": "Decision",
|
||
"simulation.stepCommand": "Unit command",
|
||
"simulation.hysteresis": "Hysteresis {value}°C",
|
||
"simulation.deviceSetpoint": "Device setpoint",
|
||
"simulation.quietIfSupported": "If supported",
|
||
"simulation.manual": "Manual",
|
||
"simulation.noCommand": "No command preview",
|
||
"simulation.noActionPreview": "No direct action payload",
|
||
"simulation.ruleOnDevice": "Action target: {device}",
|
||
"simulation.nextReady": "Ready again",
|
||
"simulation.noRules": "No active automation rules.",
|
||
"simulation.waitingForData": "Waiting for data",
|
||
"simulation.stateDemand": "Demand",
|
||
"simulation.stateSatisfied": "Satisfied",
|
||
"simulation.reasonDisabled": "Zone is disabled, so the thermostat does not send control commands.",
|
||
"simulation.reasonHouseOff": "House “Do not control” leaves this zone under manual control and sends no commands to the air conditioner.",
|
||
"simulation.reasonWaiting": "The simulator is waiting for a valid room temperature and target.",
|
||
"simulation.reasonDemand": "Room needs {mode}. Thermostat compares the reading with the target {target}°C using hysteresis {hysteresis}°C.",
|
||
"simulation.reasonSatisfied": "Target is reached. The thermostat moves the unit into standby around {standby}°C to keep the room quiet and stable.",
|
||
"simulation.activeTargetLabel": "Active target before device rounding: {value}°C",
|
||
"simulation.standbyTargetLabel": "Standby target before device rounding: {value}°C",
|
||
"common.fan": "Fan",
|
||
"devices.nameProtocol": "Name / protocol",
|
||
"history.range": "Range",
|
||
"settings.controllerHint": "Runtime and LAN discovery settings.",
|
||
"settings.nightMode": "Night mode",
|
||
"settings.nightModeHint": "During selected hours the thermostat limits fan speed and can request Quiet plus native Sleep on compatible units.",
|
||
"settings.nightModeEnabled": "Enable night mode",
|
||
"settings.nightStart": "Start",
|
||
"settings.nightEnd": "End",
|
||
"settings.nightMaxFan": "Maximum fan speed",
|
||
"settings.nightForceQuiet": "Use Quiet when supported",
|
||
"settings.metricsAndLogs": "Metrics and logs",
|
||
"settings.eventRetentionDays": "Event/log retention (days)",
|
||
"settings.debugHint": "Live diagnostics displayed on every application page.",
|
||
"settings.sensorAliases": "Sensor aliases",
|
||
"settings.sensorAliasesHint": "Friendly names are used in charts and selectors. Badges show whether an entity is collected as metrics, used by Flow, or both. A shared Flow input by itself does not enable metric collection.",
|
||
"settings.aliasPlaceholder": "Friendly name",
|
||
"settings.noSensorAliases": "No Home Assistant sensors are known yet. Add an entity_id below.",
|
||
"settings.aliasRequired": "Enter both entity_id and alias.",
|
||
"settings.saveHint": "Save changes made in the blocks above.",
|
||
"logs.retention": "Log retention",
|
||
"logs.retentionHint": "Old event rows are removed automatically during maintenance.",
|
||
"logs.keepFor": "Keep for",
|
||
"logs.retentionSaved": "Log retention set to {days} days.",
|
||
"simulation.flowEyebrow": "Live flow",
|
||
"simulation.flowTitle": "Automation flow board",
|
||
"simulation.legendInput": "Input",
|
||
"simulation.legendLogic": "Logic",
|
||
"simulation.legendAction": "Action",
|
||
"simulation.fanMax": "fan max",
|
||
"simulation.globalInput": "Global input",
|
||
"simulation.thermostat": "Thermostat",
|
||
"simulation.callForComfort": "Comfort demand",
|
||
"simulation.standby": "Quiet standby",
|
||
"simulation.nextEvent": "Next event",
|
||
"simulation.noEventShort": "No event",
|
||
"simulation.schedule": "Schedule",
|
||
"common.days": "days",
|
||
"actions.clear": "Clear",
|
||
"simulation.scheduled": "Scheduled",
|
||
"settings.nightNativeSleep": "Use native Sleep when supported",
|
||
"devices.features": "Unit features",
|
||
"devices.noExtraFeatures": "No additional features detected yet.",
|
||
"devices.light": "Panel light",
|
||
"devices.xfan": "X-FAN",
|
||
"devices.health": "Health",
|
||
"devices.air": "Air",
|
||
"devices.sleep": "Sleep",
|
||
"nav.nightMode": "Night mode",
|
||
"nav.homeAssistant": "Home Assistant / Sensors",
|
||
"night.eyebrow": "Comfort",
|
||
"night.description": "Configure quieter thermostat behavior for sleeping hours without mixing it with application settings.",
|
||
"night.saveHint": "Save night-mode changes.",
|
||
"homeAssistant.eyebrow": "Integration",
|
||
"homeAssistant.description": "Home Assistant connection, thermostat temperature sources, shared Flow inputs, sensor aliases and integration access.",
|
||
"homeAssistant.saveHint": "Save Home Assistant and sensor changes.",
|
||
"notifications.title": "Notifications",
|
||
"notifications.hint": "Send important events or only problems/anomalies.",
|
||
"notifications.enable": "Enable notifications",
|
||
"notifications.mode": "Mode",
|
||
"notifications.problems": "Errors and anomalies only",
|
||
"notifications.important": "Important events + problems",
|
||
"notifications.provider": "Provider",
|
||
"notifications.pushoverToken": "Pushover application token",
|
||
"notifications.pushoverUser": "Pushover user/group key",
|
||
"notifications.slackWebhook": "Slack incoming webhook",
|
||
"notifications.discordWebhook": "Discord webhook",
|
||
"notifications.cooldown": "Cooldown (s)",
|
||
"notifications.failureThreshold": "Communication failures before alert",
|
||
"notifications.targetTimeout": "Target not reached timeout (min)",
|
||
"notifications.test": "Send test notification",
|
||
"zones.copyFrom": "Copy thermostat settings from…",
|
||
"zones.copySettings": "Copy settings",
|
||
"automations.preset": "Preset…",
|
||
"automations.presetHot": "High temperature cooling",
|
||
"automations.presetCold": "Low temperature heating",
|
||
"automations.presetMorning": "Morning comfort",
|
||
"automations.presetNightOff": "Night power off",
|
||
"actions.apply": "Apply",
|
||
"logs.level": "Level",
|
||
"logs.category": "Category",
|
||
"logs.all": "All",
|
||
"logs.errors": "Errors",
|
||
"logs.warnings": "Warnings",
|
||
"logs.integrations": "Integrations",
|
||
"logs.systemOther": "System/other",
|
||
"zones.copyDifferent": "Choose a different thermostat profile",
|
||
"zones.copiedFrom": "Thermostat settings copied from {name}",
|
||
"house.noControl": "Do not control",
|
||
"house.powerAllEyebrow": "Global power",
|
||
"house.powerAllTitle": "All air conditioners",
|
||
"house.powerAllHint": "Bulk power control for all units. OFF leaves thermostats locally off until you explicitly turn a thermostat, group or the whole house back on.",
|
||
"house.powerOnAll": "Turn all on",
|
||
"house.powerOffAll": "Turn all off",
|
||
"house.powerOnDone": "All thermostats enabled and ON sent to all units",
|
||
"house.powerOffDone": "All units turned off; thermostats remain locally off",
|
||
"house.powerPartial": "Could not change power on {count} devices",
|
||
"preset.manual": "Manual",
|
||
"nav.groups": "Groups",
|
||
"groups.eyebrow": "Group control",
|
||
"groups.dashboardTitle": "Selected air conditioners",
|
||
"groups.dashboardHint": "Control each group independently: ON activates control of its units, OFF powers the units down and releases group ownership. You can also choose mode, preset, or a custom temperature.",
|
||
"groups.manage": "Manage groups",
|
||
"groups.new": "New group",
|
||
"groups.description": "Combine thermostat zones such as upstairs and downstairs and control only that set. Turning a group on activates its thermostats; turning it off powers its units down and releases group ownership.",
|
||
"groups.group": "Group",
|
||
"groups.namePlaceholder": "Upstairs",
|
||
"groups.members": "Group members",
|
||
"groups.membersHint": "Groups are built from thermostat zones. ON takes control of group members; OFF powers their units down without leaving a group ownership lock.",
|
||
"groups.noMembers": "No members",
|
||
"groups.mixed": "Mixed",
|
||
"groups.followHouse": "Global mode",
|
||
"groups.mode": "Mode",
|
||
"groups.profile": "Profile",
|
||
"groups.masterOff": "",
|
||
"groups.memberCount": "{count} zones",
|
||
"groups.emptyTitle": "No groups yet",
|
||
"groups.emptyText": "Create a group to control selected air conditioners together.",
|
||
"groups.partial": "Group updated, but {count} control operations could not be completed.",
|
||
"groups.controlUpdated": "Group state updated.",
|
||
"groups.noZones": "Create thermostat zones before creating a group.",
|
||
"automations.targetType": "Target type",
|
||
"automations.groupHint": "For a group, Auto means follow the whole-house heating/cooling mode. Group profiles are applied to all member zones.",
|
||
"simulation.openTab": "Open simulator only in new tab",
|
||
"simulation.fullscreen": "Full screen",
|
||
"simulation.exitFullscreen": "Exit full screen",
|
||
"simulation.viewBy": "View by",
|
||
"simulation.unitsView": "Individual units",
|
||
"simulation.groupsView": "Groups",
|
||
"simulation.show": "Show",
|
||
"simulation.allUnits": "All units",
|
||
"simulation.allGroups": "All groups",
|
||
"groups.chooseMember": "Select at least one thermostat zone.",
|
||
"zones.configuration": "Zone configuration",
|
||
"zones.currentStatus": "Current status",
|
||
"zones.controlOnDashboard": "Current control is available in thermostats on the Dashboard.",
|
||
"zones.controlNow": "Control",
|
||
"zones.noGroup": "no group",
|
||
"zones.coolOnly": "Cooling only",
|
||
"zones.heatOnly": "Heating only",
|
||
"zones.manualDeviceControl": "Manual control active",
|
||
"zones.manualDeviceDescription": "Manual control has priority. Automation, schedules and group control for this zone stay paused until you explicitly choose Resume automation.",
|
||
"zones.manualDeviceUntil": "Manual control / remote until {time}",
|
||
"zones.manualDeviceNoBoundary": "Manual control / remote · until resumed",
|
||
"zones.resumeAutomation": "Resume automation",
|
||
"zones.localThermostatControl": "Local thermostat",
|
||
"zones.localThermostatOn": "Local control · on",
|
||
"zones.localThermostatOff": "Local control · off",
|
||
"zones.localThermostatOnDescription": "This zone runs locally regardless of whether group-level control is enabled. Sensor, hysteresis, profile and GREE regulation remain active.",
|
||
"zones.localThermostatOffDescription": "This zone is locally off. After automation is resumed it stays OFF unless a schedule, manual target, temporary session or another explicit control source is active.",
|
||
"zones.unitPowerLocalHint": "Turns this zone's local thermostat on or off; this is not remote-style or direct device control.",
|
||
"zones.localPowerUpdated": "Local thermostat state updated",
|
||
"zones.turnThermostatOn": "Turn thermostat on",
|
||
"zones.turnThermostatOff": "Turn thermostat off",
|
||
"zones.waiting": "Waiting",
|
||
"zones.noMeasurement": "No measurement",
|
||
"zones.localThermostatOffDescriptionTimed": "This zone is locally off. Automation will resume automatically in {time}. After resuming, the zone stays OFF unless a schedule or another explicit control source is active.",
|
||
"zones.groupOffDescriptionTimed": "Group “{group}” is off. Automation will resume automatically in {time}. After resuming, the zone stays OFF unless a schedule or another explicit control source is active.",
|
||
"zones.localThermostatResuming": "Timer elapsed — automation is checking for an active control source…",
|
||
"zones.resumeNow": "Resume now",
|
||
"zones.controlOwner": "Control",
|
||
"zones.ownerAutomation": "Automation",
|
||
"zones.ownerLocalThermostat": "Local thermostat",
|
||
"zones.ownerExternal": "Remote / external control",
|
||
"zones.ownerHaDirect": "HA — direct control",
|
||
"zones.ownerWebDirect": "Web — direct control",
|
||
"zones.ownerGlobalOff": "Globally off",
|
||
"zones.ownerSince": "since",
|
||
"zones.ownerResume": "until",
|
||
"zones.lockoutUntil": "lockout until",
|
||
"settings.haSensorStaleAfterMinutes": "Maximum HA sensor reading age (min)",
|
||
"settings.haSensorStaleAfterHint": "If the HA sensor is not updated within this time, the reading is treated as stale. The thermostat falls back to the GREE sensor when available.",
|
||
"zones.quickThermostat": "Thermostat",
|
||
"zones.temporaryTitle": "Temporary mode",
|
||
"zones.temporaryActive": "Temporary thermostat active",
|
||
"zones.temporaryScheduled": "Temporary thermostat scheduled",
|
||
"zones.temporaryStop": "Finish and return to automation",
|
||
"zones.temporaryTarget": "Thermostat temperature",
|
||
"zones.temporaryStartRule": "When to start",
|
||
"zones.temporaryStartNow": "Immediately",
|
||
"zones.temporaryStartDelay": "After a delay",
|
||
"zones.temporaryStartAt": "At a specific date and time",
|
||
"zones.temporaryStartDelayMinutes": "Start in (min)",
|
||
"zones.temporaryStartAtDate": "Start at",
|
||
"zones.temporaryFinishRule": "When to return to automation",
|
||
"zones.temporaryDuration": "After a duration",
|
||
"zones.temporaryUntil": "At a specific date and time",
|
||
"zones.temporaryReached": "When a temperature condition is reached",
|
||
"zones.temporaryStable": "After a temperature condition stays stable",
|
||
"zones.temporaryScheduleBoundary": "At the next schedule transition",
|
||
"zones.temporaryDurationMinutes": "Run time (min)",
|
||
"zones.temporaryUntilDate": "Finish at",
|
||
"zones.temporaryCondition": "Condition",
|
||
"zones.temporaryWithin": "within target ± tolerance",
|
||
"zones.temporaryAtOrBelow": "temperature ≤ target",
|
||
"zones.temporaryAtOrAbove": "temperature ≥ target",
|
||
"zones.temporaryTolerance": "Tolerance °C",
|
||
"zones.temporaryHoldMinutes": "Condition must hold for (min)",
|
||
"zones.temporarySafetyLimit": "Safety limit (min, optional)",
|
||
"zones.temporaryStableHint": "If temperature leaves the condition, the hold countdown resets and starts again after the condition is met again.",
|
||
"zones.temporaryScheduleHint": "Thermostat will finish at the next change of the active schedule entry for this zone.",
|
||
"zones.temporaryStart": "Start temporarily",
|
||
"zones.temporaryUpdate": "Update rules",
|
||
"zones.temporaryShort": "Timed",
|
||
"zones.temporaryStartHint": "Run thermostat temporarily or until a condition is met.",
|
||
"zones.temporaryOverride": "Temporary · {time}",
|
||
"zones.temporaryWithinShort": "{target}°C ±{tolerance}°C",
|
||
"zones.temporaryAtOrBelowShort": "≤ {target}°C · tol. {tolerance}°C",
|
||
"zones.temporaryAtOrAboveShort": "≥ {target}°C · tol. {tolerance}°C",
|
||
"zones.temporaryHoldingStatus": "Condition met: {condition}. Stability countdown is running.",
|
||
"zones.temporaryWaitingStable": "Waiting for continuous condition: {condition}.",
|
||
"zones.temporaryWaitingReached": "Waiting for condition: {condition}.",
|
||
"zones.temporaryUntilScheduleStatus": "Until the next schedule transition",
|
||
"zones.temporaryTimeStatus": "Until automatic return to automation",
|
||
"zones.temporaryScheduledStatus": "Scheduled start: {time}. Normal automation continues unchanged until then.",
|
||
"zones.temporaryStartingStatus": "Starting thermostat…",
|
||
"zones.temporaryWaitingMaster": "The session is waiting for MASTER to be enabled and is not consuming active runtime.",
|
||
"zones.temporaryPausedManual": "The session is paused by manual/remote control. Active runtime and condition hold time are not advancing.",
|
||
"zones.temporaryStopped": "Temporary mode finished — automation resumed control",
|
||
"zones.temporaryStarted": "Temporary thermostat started",
|
||
"zones.temporaryScheduledToast": "Temporary thermostat has been scheduled",
|
||
"zones.temporaryInvalidStartAt": "Enter a valid start date and time",
|
||
"zones.temporaryInvalidUntil": "Enter a valid finish date and time",
|
||
"zones.temporaryEndAfterStart": "The finish time must be after termostat starts",
|
||
"zones.automationToggleHint": "Enables or disables thermostat automation for this zone. This is not temporary control.",
|
||
"zones.enabledAutomationDescription": "Disabling the zone stops automation. Manual thermostat, temporary thermostat and direct manual control remain available.",
|
||
"zones.disabledManualControlTitle": "Zone is disabled",
|
||
"zones.disabledManualControlHint": "Zone automation is disabled. Temporary thermostat, manual thermostat and direct manual control remain available.",
|
||
"dashboard.sections": "Dashboard sections",
|
||
"dashboard.tabMain": "Main",
|
||
"dashboard.tabThermostats": "Thermostats",
|
||
"dashboard.tabManual": "Manual control",
|
||
"dashboard.toolbarWorking": "{active}/{total} running",
|
||
"notifications.alertTypes": "Alert types",
|
||
"notifications.alertTypesHint": "Choose which alerts may be delivered. Thresholds above still define when an applicable alert is raised.",
|
||
"notifications.alertStaleSensor": "Stale Home Assistant sensor readings",
|
||
"notifications.alertSensorErrors": "Other Home Assistant sensor errors",
|
||
"notifications.alertCommunication": "Device communication problems",
|
||
"notifications.alertTargetTimeout": "Target temperature timeout",
|
||
"notifications.alertAutomation": "Automation errors and conflicts",
|
||
"notifications.alertSensorDiscrepancy": "GREE vs Home Assistant temperature difference",
|
||
"notifications.alertControlErrors": "Thermostat and group control errors",
|
||
"notifications.alertImportantEvents": "Important state changes",
|
||
"notifications.alertOther": "Other warnings and errors",
|
||
"notifications.testSent": "Test notification sent",
|
||
"actions.close": "Close",
|
||
"actions.remove": "Remove",
|
||
"plan.strategySetpoint": "Setpoint",
|
||
"simulation.running": "RUNNING",
|
||
"simulation.idle": "IDLE",
|
||
"logs.info": "Info",
|
||
"logs.days7": "7 days",
|
||
"logs.days14": "14 days",
|
||
"logs.days30": "30 days",
|
||
"logs.days90": "90 days",
|
||
"logs.days180": "180 days",
|
||
"logs.days365": "365 days",
|
||
"history.hoverHint": "Hover or tap for exact values. Drag-select an area to zoom; pinch on mobile. Click legend items to hide or show metrics.",
|
||
"actions.saving": "Saving…",
|
||
"actions.retry": "Retry",
|
||
"auth.connecting": "Connecting…",
|
||
"confirm.discardChanges": "Discard unsaved changes?",
|
||
"status.offlineHint": "Live updates are unavailable. Displayed data may be stale.",
|
||
"validation.required": "This field is required.",
|
||
"validation.url": "Enter a valid http:// or https:// URL.",
|
||
"validation.range": "Enter a value from {min} to {max}.",
|
||
"validation.invalid": "Check this value.",
|
||
"validation.entityId": "Use a Home Assistant entity_id such as sensor.living_room_temperature.",
|
||
"validation.fixFields": "Correct the highlighted fields before saving.",
|
||
"history.legendShow": "Show metric: {name}",
|
||
"history.legendHide": "Hide metric: {name}",
|
||
"history.zoomControls": "Chart zoom",
|
||
"history.zoomOut": "Zoom out",
|
||
"history.zoomReset": "Reset zoom",
|
||
"history.zoomIn": "Zoom in",
|
||
"history.fullscreen": "Enlarge chart",
|
||
"history.exitFullscreen": "Close enlarged chart",
|
||
"house.powerOffConfirm": "Turn all air conditioners off? All thermostats will remain locally OFF with no timer. You can later enable an individual thermostat, a group, or the whole house.",
|
||
"zones.temporaryStarting": "Starting…",
|
||
"notifications.applicationTokenPlaceholder": "Application token",
|
||
"notifications.userKeyPlaceholder": "User/group key",
|
||
"settings.testingHa": "Testing…",
|
||
"settings.settingsSections": "Settings sections",
|
||
"settings.applicationSettings": "Application",
|
||
"settings.greeSettings": "GREE",
|
||
"settings.applicationRuntime": "Application runtime",
|
||
"settings.applicationRuntimeHint": "Application-wide behavior that does not change GREE transport or discovery.",
|
||
"settings.simulationModeHint": "When enabled, a prominent simulation warning is shown throughout the application.",
|
||
"settings.greeConnection": "GREE connection",
|
||
"settings.greeConnectionHint": "Controller identity, polling intervals and LAN discovery transport.",
|
||
"settings.systemStatusTitle": "Controller health",
|
||
"settings.systemStateHint": "Application process, control engine, live connection and local runtime status.",
|
||
"settings.controlEngine": "Control engine",
|
||
"settings.ready": "Ready",
|
||
"settings.syncing": "Synchronizing",
|
||
"settings.websocket": "Live connection",
|
||
"settings.httpBind": "HTTP bind",
|
||
"settings.database": "Database",
|
||
"settings.basePath": "Base path",
|
||
"settings.healthy": "Healthy",
|
||
"settings.attention": "Check status",
|
||
"debug.filterAria": "Debug source",
|
||
"debug.all": "All",
|
||
"debug.requests": "Requests",
|
||
"debug.gree": "GREE",
|
||
"debug.emptyRequests": "No HTTP requests captured yet.",
|
||
"debug.emptyGree": "No GREE frames captured yet.",
|
||
"simulation.bannerTitle": "SIMULATION MODE",
|
||
"simulation.bannerText": "Simulation mode is enabled. Treat current states and results as test data.",
|
||
"zones.separateHysteresisHint": "Enable independent hysteresis values for heating and cooling. When disabled, one shared value is used.",
|
||
"groups.customTemperature": "Custom temperature",
|
||
"groups.customTemperatureHint": "Enter the target temperature for every zone in this group.",
|
||
"groups.applyCustomTemperatureHint": "Set this temperature as the manual target for the whole group.",
|
||
"groups.customTemperatureRange": "Group temperature must be between 8 and 30°C.",
|
||
"groups.activeControl": "Group control",
|
||
"groups.customOpenHint": "Open a custom temperature. The group changes only after you press Apply.",
|
||
"zones.ownerGroup": "Group control",
|
||
"zones.waitingLockout": "Waiting — compressor protection",
|
||
"zones.blockedByGroup": "Blocked by disabled group: {group}",
|
||
"zones.waitingStart": "Waiting for the unit to start",
|
||
"zones.waitingGroup": "Waiting — blocked by group: {groups}",
|
||
"zones.runningDemand": "Running",
|
||
"groups.customDraftPending": "Not applied. The group changes profile only after you press Apply.",
|
||
"zones.waitingOffline": "Waiting — unit offline or communication error",
|
||
"zones.waitingDeviceDisabled": "Waiting — device is technically disabled",
|
||
"zones.waitingMode": "Waiting for the unit mode to change",
|
||
"groups.gateOff": "Group off",
|
||
"groups.gateOn": "Group on",
|
||
"zones.disabledByGroup": "Disabled by group: {groups}",
|
||
"groups.controlToggle": "Group power",
|
||
"groups.enableControlFirst": "Turn the group on first.",
|
||
"settings.compressorProtection": "Compressor protection",
|
||
"settings.compressorProtectionTime": "Protection time (min)",
|
||
"settings.compressorProtectionHint": "Recommended: 3 minutes. Starts and Heat/Cool changes requested during protection are queued. Open the full list with the Queue button above Thermostats.",
|
||
"zones.compressorQueueTitle": "Waiting for compressor protection",
|
||
"zones.queuedPowerOn": "Queued: power on · {mode} · {temperature}°C",
|
||
"zones.queuedGlobalPowerOn": "Queued: global unit power on",
|
||
"zones.queuedModeChange": "Queued: change mode to {mode} · {temperature}°C",
|
||
"zones.queuedAction": "Queued control task",
|
||
"zones.compressorQueueUntil": "Earliest execution: {time}",
|
||
"zones.afterProtection": "after protection ends",
|
||
"zones.cancelAllQueued": "Cancel all waiting",
|
||
"zones.queuedCancelled": "Queued task cancelled.",
|
||
"zones.noQueuedTask": "There is no queued task to cancel.",
|
||
"zones.queuedCancelledAll": "Cancelled queued tasks: {count}.",
|
||
"zones.queueCancelledStatus": "Protection task cancelled — waiting for a new command",
|
||
"zones.queueOverview": "Queue",
|
||
"zones.queueEyebrow": "Compressor protection",
|
||
"zones.queueTitle": "Command queue",
|
||
"zones.queueHint": "Commands waiting for compressor protection to end. You can cancel a single task or clear the whole queue.",
|
||
"zones.queuePendingLabel": "Waiting tasks",
|
||
"zones.queueEmptyTitle": "The queue is empty",
|
||
"zones.queueEmptyText": "There are no commands waiting for compressor protection to end.",
|
||
"zones.queueReasonProtection": "Compressor protection",
|
||
"zones.queueSource": "Source: {source}",
|
||
"zones.queueSourceGlobal": "Global power",
|
||
"zones.queueRemaining": "Remaining {time}",
|
||
"zones.queueReady": "Ready to execute",
|
||
"zones.queueCancelAllConfirm": "Cancel all tasks ({count}) waiting for compressor protection?",
|
||
"nav.flows": "Flow",
|
||
"flow.eyebrow": "Visual logic",
|
||
"flow.new": "New Flow",
|
||
"flow.infoTitle": "One place for schedules and automations",
|
||
"flow.infoText": "Build logic from blocks. GREE Controller translates Flow into generated schedules and automations. Generated entries are read-only outside this editor.",
|
||
"flow.sourceOfTruth": "Flow = source of truth",
|
||
"flow.blocks": "Blocks",
|
||
"flow.defaultDescription": "Visual control logic",
|
||
"flow.compilesAutomatically": "Automatically translated into schedules and automations",
|
||
"flow.openEditor": "Open editor",
|
||
"flow.emptyTitle": "No Flows",
|
||
"flow.emptyText": "Create your first Flow and build the logic from blocks.",
|
||
"flow.editorEyebrow": "Flow editor",
|
||
"flow.namePlaceholder": "Flow name / alias",
|
||
"flow.paletteHint": "Add a block, then connect its output to the next block.",
|
||
"flow.time": "Time",
|
||
"flow.sensors": "Sensors",
|
||
"flow.logic": "Logic",
|
||
"flow.actions": "Actions",
|
||
"flow.emptyCanvas": "Start by adding blocks",
|
||
"flow.emptyCanvasHint": "Put conditions on the left and actions on the right.",
|
||
"flow.interpretation": "Interpretation",
|
||
"flow.previewDetails": "Interpretation and Flow cycle",
|
||
"flow.selectBlock": "Select a block",
|
||
"flow.selectBlockHint": "Its settings will appear here.",
|
||
"flow.newDefaultName": "New logic",
|
||
"flow.notFound": "Flow not found",
|
||
"flow.connectHere": "Connect here",
|
||
"flow.startConnection": "Start connection",
|
||
"flow.allConditions": "All conditions must match",
|
||
"flow.operator": "Operator",
|
||
"flow.state": "State",
|
||
"flow.value": "Value",
|
||
"flow.andHint": "AND joins multiple branches. All conditions connected upstream of an action must match.",
|
||
"flow.blockSettings": "Block settings",
|
||
"flow.noActionsYet": "Add an action to see the interpreted logic.",
|
||
"flow.always": "Always",
|
||
"flow.compileCount": "{schedules} schedules · {automations} automations",
|
||
"flow.nameRequired": "Enter a Flow name / alias",
|
||
"flow.saved": "Flow saved and translated into executable logic.",
|
||
"flow.deleteConfirm": "Delete Flow “{name}” together with its generated schedules and automations?",
|
||
"flow.deleted": "Flow deleted.",
|
||
"flow.generated": "Generated by Flow",
|
||
"flow.generatedReadOnly": "Generated by Flow — edit only in the Flow editor",
|
||
"flow.anyCondition": "Any condition may match",
|
||
"flow.invertCondition": "Invert condition",
|
||
"flow.orHint": "OR is true when at least one connected branch matches.",
|
||
"flow.notHint": "NOT inverts exactly one connected branch.",
|
||
"flow.and": "and",
|
||
"flow.or": "or",
|
||
"flow.not": "not",
|
||
"flow.node.weekday": "Weekdays",
|
||
"flow.node.timeRange": "Time range",
|
||
"flow.node.dateRange": "Date range",
|
||
"flow.node.outdoorTemperature": "Outdoor temperature",
|
||
"flow.node.deviceTemperature": "Device temperature",
|
||
"flow.node.zoneTemperature": "Zone temperature",
|
||
"flow.node.haState": "HA: state",
|
||
"flow.node.haNumeric": "HA: numeric value",
|
||
"flow.node.and": "AND",
|
||
"flow.node.or": "OR",
|
||
"flow.node.not": "NOT",
|
||
"flow.node.thermostat": "Thermostat",
|
||
"flow.node.greeDevice": "GREE device",
|
||
"flow.node.group": "Group",
|
||
"common.yes": "Yes",
|
||
"common.no": "No",
|
||
"common.loading": "Loading…",
|
||
"flow.import": "Import Flow",
|
||
"flow.export": "Export",
|
||
"flow.exported": "Flow exported.",
|
||
"flow.imported": "Flow imported and compiled.",
|
||
"flow.importFailed": "Flow import failed",
|
||
"flow.templates": "Presets",
|
||
"flow.templateLibrary": "Flow preset library",
|
||
"flow.templatesHint": "Ready-made presets create an editable graph using existing zones, devices and groups.",
|
||
"flow.templateReplaceConfirm": "Replace the current blocks with this preset?",
|
||
"flow.dryRun": "Dry-run",
|
||
"flow.logs": "Logs",
|
||
"flow.testMode": "Flow diagnostics",
|
||
"flow.simulationTime": "Simulation date and time",
|
||
"flow.runSimulation": "Run simulation",
|
||
"flow.dryRunHint": "Dry-run does not change thermostat, device, group, schedule or automation state.",
|
||
"flow.simulationOverrides": "Sensor overrides",
|
||
"flow.simulationOverridesHint": "Leave blank to use the current application or Home Assistant state.",
|
||
"flow.useLiveValue": "live value",
|
||
"flow.noSimulationOverrides": "This Flow has no sources that need value overrides.",
|
||
"flow.runningSimulation": "Simulating…",
|
||
"flow.simulationFailed": "Simulation failed",
|
||
"flow.compiledPreview": "Compilation: {schedules} schedules · {automations} automations",
|
||
"flow.wouldExecute": "Action would execute",
|
||
"flow.blockedByOwnership": "Blocked by ownership",
|
||
"flow.conditionFalse": "Condition false",
|
||
"flow.blockReason": "Block reason",
|
||
"flow.saveBeforeLogs": "Save the Flow first to view its logs.",
|
||
"flow.noLogs": "No logs for this Flow.",
|
||
"flow.logsFailed": "Could not load Flow logs.",
|
||
"flow.attribute": "Attribute",
|
||
"flow.houseMode": "House mode",
|
||
"flow.field": "Field",
|
||
"flow.node.haAttribute": "HA: attribute",
|
||
"flow.node.houseMode": "House mode",
|
||
"flow.node.deviceState": "Device state",
|
||
"flow.node.zoneState": "Thermostat state",
|
||
"flow.node.constant": "Test constant",
|
||
"flow.node.groupState": "Group state",
|
||
"flow.node.nightMode": "Night mode",
|
||
"flow.nightModeActive": "active according to app settings",
|
||
"flow.nightModeHint": "This condition is true while the Night mode configured in the app is currently active. Use NOT to match time outside Night mode.",
|
||
"flow.node.haAvailable": "HA: availability",
|
||
"flow.available": "available",
|
||
"flow.haAvailableHint": "This condition is true only when the Home Assistant entity returns a state other than unknown/unavailable. Connection errors fail closed as false. Useful as a guard before NOT and safety logic.",
|
||
"flow.deviceOptions": "Advanced GREE options",
|
||
"flow.deviceOptionsHint": "These fields use the existing DeviceCommand. Fan/quiet/sleep and dry/fan HVAC modes are blocked on a thermostat-assigned device when they would fight the regulator; use the Thermostat action there instead.",
|
||
"settings.haConnection": "Home Assistant connection",
|
||
"settings.haConnectionHint": "Server address and credentials used by all Home Assistant features.",
|
||
"settings.haThermostatSources": "Thermostat temperature sources",
|
||
"settings.haThermostatSourcesHint": "These settings belong to thermostat and temperature-source logic, not reusable Flow inputs.",
|
||
"flow.listCount": "{count} Flows",
|
||
"flow.quickToggleHint": "Enable or disable the Flow without opening the editor",
|
||
"flow.quickEnabled": "Flow enabled",
|
||
"flow.quickDisabled": "Flow disabled",
|
||
"flow.selectAll": "Select all",
|
||
"flow.clearSelection": "Clear selection",
|
||
"flow.selectedCount": "Selected: {count}",
|
||
"flow.node.sharedInput": "Shared input",
|
||
"flow.sharedInputMissing": "Shared input missing",
|
||
"flow.sharedInputTitle": "Shared Flow input",
|
||
"flow.sharedInputEyebrow": "Reusable data",
|
||
"flow.sharedInputType": "Source type",
|
||
"flow.sharedInputAdd": "Add input",
|
||
"flow.sharedInputsTitle": "Shared Flow inputs",
|
||
"flow.sharedInputsHint": "Define reusable value sources once, then use them in many Flows. Operators and comparison values are configured only in Flow blocks. HA sensors added only here are not stored as metrics.",
|
||
"flow.sharedInputsEmpty": "No shared inputs",
|
||
"flow.sharedInputsEmptyHint": "Add a constant, Home Assistant state, or another shared source for multiple Flows.",
|
||
"flow.sharedInputNodeHint": "This block uses a central value source. The comparison below belongs only to this Flow.",
|
||
"flow.sharedInputFlowComparisonHint": "The shared input provides only the value source. Define this Flow's comparison here.",
|
||
"flow.selectOperator": "Select operator",
|
||
"flow.sharedInputNodeEmptyHint": "Add a shared input in Home Assistant / Sensors first.",
|
||
"flow.sharedInputNameRequired": "Enter a shared input name.",
|
||
"flow.sharedInputDeleteConfirm": "Delete shared input “{name}”?",
|
||
"flow.sharedInputDeleteUsed": "Input “{name}” is used by {count} Flows. Those conditions will evaluate false after deletion. Delete it anyway?",
|
||
"flow.templateCategory.comfort": "Comfort",
|
||
"flow.templateCategory.comfort.hint": "Everyday comfort scenarios based on time, weather and house mode.",
|
||
"flow.templateCategory.energy": "Energy & cost",
|
||
"flow.templateCategory.energy.hint": "Reduce consumption during absence, expensive energy periods or high household load.",
|
||
"flow.templateCategory.safety": "Protection & safety",
|
||
"flow.templateCategory.safety.hint": "Guards for frost, overheating, humidity and open-window operation.",
|
||
"flow.templateCategory.night": "Night",
|
||
"flow.templateCategory.night.hint": "Quieter operation, sleep profiles and bedroom conditions.",
|
||
"flow.templateCategory.reliability": "Reliability",
|
||
"flow.templateCategory.reliability.hint": "Flows resilient to unavailable sensors, offline devices and disabled thermostats.",
|
||
"flow.templateCategory.advanced": "Advanced",
|
||
"flow.templateCategory.advanced.hint": "Nested AND/OR/NOT logic, multiple rooms and Home Assistant states.",
|
||
"flow.templateCategory.home_assistant": "Home Assistant / heat sources",
|
||
"flow.templateCategory.home_assistant.hint": "Coordinate GREE with a gas boiler, external heat source, heating demand and temperatures read from Home Assistant.",
|
||
"flow.templatesLoadFailed": "Unable to load preset library.",
|
||
"flow.sharedInputsSettingsLink": "Shared Flow inputs in Home Assistant →",
|
||
"flow.templateCategories": "Preset categories",
|
||
"flow.sharedInputTest": "Test HA input",
|
||
"flow.sharedInputTesting": "Testing…",
|
||
"flow.sharedInputTestHint": "The test uses the saved Home Assistant connection and does not save this input.",
|
||
"flow.sharedInputTestEntityRequired": "Enter entity_id before testing.",
|
||
"flow.sharedInputTestCurrent": "Current value",
|
||
"flow.sharedInputTestValueRead": "Value read successfully",
|
||
"flow.sharedInputTestAvailable": "Entity available",
|
||
"flow.sharedInputTestUnavailable": "Entity unavailable",
|
||
"flow.sharedInputUsedBy": "Used in {count} Flows",
|
||
"flow.sharedInputUnused": "Not used in any Flow",
|
||
"flow.openReferencedFlow": "Open Flow “{name}”",
|
||
"flow.templateSearch": "Search presets…",
|
||
"flow.templateSearchLabel": "Search presets",
|
||
"flow.templateFavorites": "Favorites",
|
||
"flow.templateRecent": "Recent",
|
||
"flow.templateNoResults": "No presets match the search.",
|
||
"flow.templateNoFavorites": "You have no favorite presets yet.",
|
||
"flow.templateNoRecent": "No preset has been used yet.",
|
||
"flow.templateFavoriteAdd": "Add to favorites",
|
||
"flow.templateFavoriteRemove": "Remove from favorites",
|
||
"flow.templatePreview": "Preset preview",
|
||
"flow.templatePreviewHint": "Review requirements and the block layout before replacing the current Flow.",
|
||
"flow.templateUse": "Use preset",
|
||
"flow.templateRequirements": "Requirements",
|
||
"flow.templateRequiresHa": "Home Assistant",
|
||
"flow.templateRequiresZone": "{count} zone(s)",
|
||
"flow.templateRequiresDevice": "{count} device(s)",
|
||
"flow.templateRequiresGroup": "{count} group(s)",
|
||
"flow.templateRequiresShared": "{count} shared input(s)",
|
||
"flow.templateRequiresEntity": "HA entities configured in the preset",
|
||
"flow.templateRequirementsReady": "Requirements available",
|
||
"flow.templateRequirementsMissing": "Missing: {items}",
|
||
"flow.templateNodesCount": "{count} blocks",
|
||
"flow.templateEdgesCount": "{count} connections",
|
||
"flow.templateSelectPreview": "Select a preset to preview it.",
|
||
"flow.templateCategory.favorites": "Favorites",
|
||
"flow.templateCategory.recent": "Recent",
|
||
"flow.enable": "Enable Flow",
|
||
"flow.disable": "Disable Flow",
|
||
"flow.logLevelInfo": "Info",
|
||
"flow.logLevelWarn": "Warning",
|
||
"flow.logLevelError": "Error",
|
||
"flow.logKindCreated": "Flow created",
|
||
"flow.logKindUpdated": "Flow updated",
|
||
"flow.logKindDeleted": "Flow deleted",
|
||
"flow.logKindImported": "Flow imported",
|
||
"flow.logKindDryRun": "Flow test",
|
||
"flow.logKindConditionError": "Condition error",
|
||
"flow.logKindActionSuppressed": "Action suppressed",
|
||
"flow.logKindActionFired": "Action executed",
|
||
"flow.logKindActionError": "Action error",
|
||
"flow.logKindBlockedZone": "Blocked by zone",
|
||
"flow.logKindBlockedManual": "Blocked by manual control",
|
||
"flow.logKindBlockedThermostat": "Blocked by thermostat",
|
||
"flow.logKindBlockedTemporary": "Blocked by temporary thermostat",
|
||
"flow.logKindBlockedThermostatOwner": "Device owned by thermostat",
|
||
"flow.logKindBlockedOwnership": "Control ownership changed",
|
||
"flow.logKindConflict": "Automation conflict",
|
||
"flow.logMessageCreated": "Flow “{name}” was created.",
|
||
"flow.logMessageUpdated": "Flow “{name}” was updated.",
|
||
"flow.logMessageDeleted": "Flow “{name}” was deleted.",
|
||
"flow.logMessageImported": "Flow “{name}” was imported.",
|
||
"flow.logMessageDryRun": "Flow “{name}” was tested without changing device state.",
|
||
"flow.logMessageConditionError": "One of the Flow conditions could not be evaluated correctly.",
|
||
"flow.logMessageActionSuppressed": "The Flow action was suppressed by the current control owner.",
|
||
"flow.logMessageActionFired": "The Flow action was executed.",
|
||
"flow.logMessageActionError": "The Flow action failed to execute.",
|
||
"flow.logMessageBlockedZone": "The Flow action was blocked because the related zone is disabled.",
|
||
"flow.logMessageBlockedManual": "The Flow action was blocked by manual device control.",
|
||
"flow.logMessageBlockedThermostat": "The Flow action was blocked by the local thermostat.",
|
||
"flow.logMessageBlockedTemporary": "The Flow action was blocked by the temporary thermostat.",
|
||
"flow.logMessageBlockedThermostatOwner": "The Flow action was suppressed because the device is controlled by an enabled thermostat zone.",
|
||
"flow.logMessageBlockedOwnership": "The Flow action was suppressed because control ownership changed during execution.",
|
||
"flow.logMessageConflict": "The Flow action was skipped because another automation already claimed the same target.",
|
||
"flow.nameAliasHint": "This is only the user-facing display name. The technical Flow ID and generated task names remain unchanged.",
|
||
"flow.editName": "Edit Flow name",
|
||
"flow.sharedInputSourceOnlyHint": "This shared input stores only the value source. Configure the comparison in the Flow block.",
|
||
"flow.triggers": "Triggers",
|
||
"flow.node.cronTrigger": "CRON schedule",
|
||
"flow.node.stableFor": "Stable for…",
|
||
"flow.node.rollingStat": "Mean / median",
|
||
"flow.node.haServiceAction": "Home Assistant service",
|
||
"flow.cronHint": "5 fields: minute hour day month weekday. Supports *, */N, ranges and lists.",
|
||
"flow.durationSeconds": "Duration [s]",
|
||
"flow.stableForHint": "The input condition must remain true continuously for the configured duration. State survives restarts.",
|
||
"flow.serviceData": "Service data (JSON)",
|
||
"flow.serviceExample": "Example: to turn on switch.gas use domain = switch, service = turn_on and entity_id = switch.gas.",
|
||
"flow.enabledState": "Enabled",
|
||
"flow.disabledState": "Disabled",
|
||
"flow.enabledSelect": "Flow state",
|
||
"settings.sensorMetricBadge": "Metrics",
|
||
"settings.sensorFlowBadge": "Flow",
|
||
"flow.invalidJson": "Invalid JSON",
|
||
"flow.mean": "Mean",
|
||
"flow.median": "Median",
|
||
"flow.source": "Source",
|
||
"flow.statistic": "Statistic",
|
||
"flow.windowSeconds": "Window [s]",
|
||
"flow.node.delay": "Wait…",
|
||
"flow.delayHint": "Passes the signal onward only after the configured time. Place it before an action to delay execution.",
|
||
"flow.timeOps": "Time operations",
|
||
"flow.haActions": "Home Assistant",
|
||
"flow.node.oscillates": "Value oscillates",
|
||
"flow.minSpan": "Minimum value span",
|
||
"flow.minDirectionChanges": "Minimum direction changes",
|
||
"flow.oscillatesHint": "Within the time window the value must move both up and down. The block requires the configured max−min span and number of direction changes.",
|
||
"flow.node.stateDuration": "State duration",
|
||
"flow.node.onChange": "Only on change",
|
||
"flow.node.rateLimit": "Max X times / period",
|
||
"flow.minDurationSeconds": "Min duration [s]",
|
||
"flow.maxDurationSeconds": "Max duration [s] (optional)",
|
||
"flow.stateDurationHint": "Passes only while the input state has lasted at least the minimum and no longer than the optional maximum. A false input resets the timer.",
|
||
"flow.changeMode": "Detect change of",
|
||
"flow.changeModeResult": "condition result",
|
||
"flow.changeModeValue": "source value",
|
||
"flow.onChangeHint": "The first observation only establishes the baseline. The block passes a later change only while the input condition is true.",
|
||
"flow.maxExecutions": "Max executions",
|
||
"flow.periodSeconds": "Period [s]",
|
||
"flow.rateLimitHint": "Limits the action to X successful executions in a rolling period. Place it directly before the action; suppressed or failed actions do not consume the limit.",
|
||
"flow.runtimeInfo": "Flow cycle",
|
||
"flow.runtimeHint": "The backend evaluates the Flow on every cycle. CRON limits when an action may execute, but stateful conditions continue to be observed.",
|
||
"flow.runtimeNoActions": "evaluate every {seconds} s · no actions",
|
||
"flow.runtimeWithoutCron": "evaluate every {seconds} s · execute without CRON",
|
||
"flow.runtimeWithCron": "evaluate every {seconds} s · execute: {cron}",
|
||
"flow.runtimeWithMultipleCrons": "evaluate every {seconds} s · execute via {count} CRON schedules",
|
||
"flow.runtimeMixed": "evaluate every {seconds} s · mixed: no CRON + {count} CRON",
|
||
"flow.cronEveryMinute": "CRON every minute",
|
||
"flow.cronEveryMinutes": "CRON every {minutes} min",
|
||
"flow.cronHourlyAt": "CRON hourly at :{minute}",
|
||
"flow.cronDailyAt": "CRON daily at {time}",
|
||
"flow.cronCustom": "CRON {expression}",
|
||
"flow.draft": "Draft",
|
||
"flow.draftStatus": "Draft · not executable",
|
||
"flow.draftNoExecution": "Draft — disabled, with no executable tasks",
|
||
"flow.draftDisabledHint": "A draft is always disabled. Finish the Flow and save it again to create executable tasks.",
|
||
"flow.draftCannotEnable": "Finish and save the Flow first. A draft cannot be enabled.",
|
||
"flow.saveAsDraftConfirm": "The Flow cannot be saved as executable:\n\n{reason}\n\nSave it as a draft instead? The draft will be disabled and will not create any tasks or schedules.",
|
||
"flow.savedAsDraft": "Flow saved as a disabled draft. You can return to it later.",
|
||
"automationHub.navigation": "Automation section",
|
||
"nav.sectionControl": "Control",
|
||
"nav.sectionAutomation": "Automation",
|
||
"nav.sectionData": "Data & system",
|
||
"nav.homeAssistantShort": "Home Assistant",
|
||
"actions.more": "More options",
|
||
"flow.addBlock": "Add block",
|
||
"flow.searchBlocks": "Search blocks…",
|
||
"flow.noBlocksFound": "No matching blocks",
|
||
"flow.noBlocksFoundHint": "Change the search phrase or clear the filter.",
|
||
"flow.zoomControls": "Flow canvas zoom",
|
||
"flow.zoomOut": "Zoom out",
|
||
"flow.zoomIn": "Zoom in",
|
||
"flow.fitView": "Fit",
|
||
"flow.unsavedChanges": "Unsaved changes",
|
||
"flow.savedState": "Saved",
|
||
"flow.expandSettings": "Expand block settings",
|
||
"flow.notSavedYet": "Not saved yet",
|
||
"schedules.enabledState": "Enabled",
|
||
"schedules.disabledState": "Disabled",
|
||
"devices.cloudUnit": "Cloud unit",
|
||
"devices.connection": "Connection",
|
||
"devices.transport": "Transport",
|
||
"devices.cloudDeviceId": "Cloud Device ID",
|
||
"devices.lastSync": "Last synchronization",
|
||
"devices.cloudDetails": "Cloud details",
|
||
"devices.cloudDiagnostics": "Cloud diagnostics",
|
||
"devices.cloudDiagnosticsHint": "Decrypted and sanitized protocol data. Passwords, tokens and cipher keys are never included.",
|
||
"energy.title": "Energy",
|
||
"energy.source": "Energy source",
|
||
"energy.sourceHint": "Choose the cumulative energy source used for charts and period totals.",
|
||
"energy.auto": "Auto",
|
||
"energy.haSensor": "Home Assistant energy sensor",
|
||
"energy.noHaSensor": "No Home Assistant energy sensor selected.",
|
||
"energy.today": "Today",
|
||
"energy.yesterday": "Yesterday",
|
||
"energy.currentMonth": "Current month",
|
||
"energy.previousMonth": "Previous month",
|
||
"energy.periodTotal": "Period total",
|
||
"energy.noData": "No energy source is configured for this device.",
|
||
"energy.hourly": "Hourly",
|
||
"energy.daily": "Daily",
|
||
"energy.monthly": "Monthly",
|
||
"settings.cloudAccountStatus": "Account status",
|
||
"settings.cloudMqttStatus": "MQTT status",
|
||
"settings.cloudReconnect": "Reconnect",
|
||
"settings.cloudPushHint": "MQTT push is primary. Polling is used only for initial state, recovery and periodic verification.",
|
||
"history.bucket": "Aggregation",
|
||
"energy.chartHint": "Period consumption calculated from cumulative meter deltas. Raw cumulative values are never plotted as consumption.",
|
||
"devices.localCloud": "Local / GREE Cloud",
|
||
"devices.discoverLocal": "Discover Local",
|
||
"devices.addLocalManual": "Add Local manually",
|
||
"devices.cloudAdded": "GREE Cloud device added",
|
||
"settings.cloudAccountTitle": "GREE Cloud account",
|
||
"settings.cloudAccountHint": "REST login and device discovery use the selected regional GREE service. The password is never returned by the API after it is saved.",
|
||
"settings.cloudEnable": "Enable GREE Cloud",
|
||
"settings.cloudRegion": "Region",
|
||
"settings.cloudPolling": "Cloud fallback polling interval (s)",
|
||
"settings.cloudLogin": "Login / email",
|
||
"settings.cloudPassword": "Password",
|
||
"settings.cloudPasswordPlaceholder": "Leave empty to keep saved secret",
|
||
"settings.cloudInstallationId": "Installation ID",
|
||
"settings.cloudLastContact": "Last successful contact",
|
||
"settings.cloudTest": "Test connection",
|
||
"settings.cloudRefreshDevices": "Refresh devices",
|
||
"settings.cloudConnected": "GREE Cloud connected · {count} device(s)",
|
||
"settings.cloudConnectionFailed": "GREE Cloud connection failed",
|
||
"devices.cloudDiscoveryTitle": "Devices on account",
|
||
"devices.cloudDiscoveryHint": "Devices are loaded from the saved GREE Cloud account. Nothing is added automatically; choose the units you want to register.",
|
||
"devices.cloudDiscoveryEmpty": "No GREE Cloud devices found",
|
||
"devices.cloudDiscoveryEmptyHint": "Check the account, region and connection.",
|
||
"devices.cloudAlreadyAdded": "Added",
|
||
"status.cloudDisconnected": "Cloud disconnected",
|
||
"status.authenticationError": "Authentication error",
|
||
"status.unknown": "Unknown",
|
||
"dashboard.quickThermostats": "Thermostats",
|
||
"zones.thermostat": "Thermostat",
|
||
"settings.debugCloudRequests": "Trace GREE Cloud API requests",
|
||
"settings.debugCloudMqtt": "Trace GREE Cloud MQTT",
|
||
"debug.cloud": "Cloud API",
|
||
"debug.mqtt": "MQTT",
|
||
"debug.liveSources": "Live protocol sources",
|
||
"debug.emptyCloud": "No GREE Cloud API activity captured yet.",
|
||
"debug.emptyMqtt": "No GREE Cloud MQTT activity captured yet.",
|
||
"settings.cloudDevicesOnline": "Devices online",
|
||
"settings.cloudResponseTime": "Last device response time",
|
||
"settings.cloudLastDeviceResponse": "Last device response",
|
||
"settings.cloudLastMqttMessage": "Last MQTT activity",
|
||
"settings.cloudConnectedSince": "MQTT connected since",
|
||
"settings.cloudBroker": "Broker",
|
||
"settings.cloudTraffic": "Requests / responses / timeouts",
|
||
"devices.model": "Model",
|
||
"devices.firmware": "Firmware",
|
||
"devices.lastResponse": "Last response",
|
||
"devices.noCloudSyncYet": "No successful synchronization yet",
|
||
"devices.noCloudResponseYet": "No successful device response yet",
|
||
"devices.cloudAuthenticationProblem": "GREE Cloud authentication error",
|
||
"devices.cloudTransportProblem": "GREE Cloud connection is unavailable",
|
||
"devices.cloudDeviceOffline": "GREE Cloud is connected, but the unit is not responding",
|
||
"settings.cloudRestResponseTime": "Last REST response time",
|
||
"common.pending": "Pending"
|
||
}
|
||
}
|