800 lines
44 KiB
JSON
800 lines
44 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",
|
|
"devices.disabledZoneTechnicalOnly": "This zone is disabled. Manual control of its unit is available only from the Devices view.",
|
|
"zones.automation": "Automation",
|
|
"zones.new": "New zone",
|
|
"zones.description": "Zones define thermostat logic and sensor configuration. Use Quick 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": "Default entity_id",
|
|
"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.",
|
|
"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 and performs a new bind on the next request.",
|
|
"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.quickThermostats": "Thermostats",
|
|
"common.unavailable": "Unavailable",
|
|
"mode.off": "Off",
|
|
"house.seasonMode": "Home climate mode",
|
|
"house.smartThermostat": "Smart thermostat",
|
|
"house.setpointStrategy": "Cooling or heating controls zones automatically. “Do not control” leaves devices and manually activated zones untouched by the house thermostat.",
|
|
"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 only in charts and selectors. Home Assistant requests always use the original entity_id.",
|
|
"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": "Connection, temperature sensors, friendly aliases and access tokens for the Home Assistant integration.",
|
|
"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": "Whole-house automation control. “Turn all off” powers units down and stops automation without changing each group control enable setting. “Turn all on” resumes automation using the current zone and group settings.",
|
|
"house.powerOnAll": "Turn all on",
|
|
"house.powerOffAll": "Turn all off",
|
|
"house.powerOnDone": "Whole-house automation resumed",
|
|
"house.powerOffDone": "All air conditioners turned 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": "Whole-house automation is off. You can prepare group control, but units remain off until whole-house control is enabled.",
|
|
"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 Quick 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. Without an active countdown it remains outside group control until automation is resumed manually.",
|
|
"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 takes control again in {time}.",
|
|
"zones.localThermostatResuming": "Timer elapsed — automation is taking control…",
|
|
"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": "Quick thermostat",
|
|
"zones.temporaryTitle": "Temporary mode",
|
|
"zones.temporaryActive": "Temporary Quick Thermostat active",
|
|
"zones.temporaryScheduled": "Temporary Quick Thermostat scheduled",
|
|
"zones.temporaryStop": "Finish and return to automation",
|
|
"zones.temporaryTarget": "Quick 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": "Quick 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 Quick 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 Quick 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 Quick Thermostat started",
|
|
"zones.temporaryScheduledToast": "Temporary Quick 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 Quick Thermostat starts",
|
|
"zones.automationToggleHint": "Enables or disables thermostat automation for this zone. This is not temporary control.",
|
|
"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.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",
|
|
"house.powerOffConfirm": "Turn off all air conditioners? Group ON/OFF settings will be preserved.",
|
|
"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",
|
|
"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 and can be cancelled from Thermostats.",
|
|
"zones.compressorQueueTitle": "Waiting for compressor protection",
|
|
"zones.queuedPowerOn": "Queued: power on · {mode} · {temperature}°C",
|
|
"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"
|
|
}
|
|
}
|