mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-29 21:03:40 +00:00
Updated translation JSON schemas to reflect current implementation:
- translation_schema.json: Documents HA's official translation structure
(config, options, selector paths, entity states)
- custom_translation_schema.json: Documents custom extension structure
(entity descriptions not supported by HA schema)
Schema updates:
- Added time_units section (day, days, hour, hours, minute, minutes, ago, now)
- Documented selector.{translation_key}.options.{value} pattern
- Added account_choice selector structure
Impact: Provides validation and documentation for translation files.
Helps maintain consistency across all 5 language files (de, en, nb, nl, sv).
372 lines
16 KiB
JSON
372 lines
16 KiB
JSON
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"title": "Home Assistant Translation File Schema",
|
|
"description": "Schema for Home Assistant custom integration translation files based on https://developers.home-assistant.io/docs/internationalization/core",
|
|
"type": "object",
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Title of the integration (optional, will fallback to integration name if omitted). Only include if not a product brand."
|
|
},
|
|
"common": {
|
|
"type": "object",
|
|
"description": "Shared strings that can be referenced using [%key:component::domain::common::key_path%]",
|
|
"additionalProperties": true
|
|
},
|
|
"config": {
|
|
"type": "object",
|
|
"description": "Translations for the configuration flow",
|
|
"properties": {
|
|
"flow_title": {
|
|
"type": "string",
|
|
"description": "Title shown in list (only rendered if placeholders required), e.g. 'Discovered Device ({host})'"
|
|
},
|
|
"entry_type": {
|
|
"type": "string",
|
|
"description": "Label explaining what an entry represents (optional, only if default translations are misleading)"
|
|
},
|
|
"initiate_flow": {
|
|
"type": "object",
|
|
"description": "Menu or button labels for starting flows",
|
|
"properties": {
|
|
"reconfigure": {
|
|
"type": "string",
|
|
"description": "Label for reconfigure flow"
|
|
},
|
|
"user": {
|
|
"type": "string",
|
|
"description": "Label for user flow"
|
|
}
|
|
}
|
|
},
|
|
"step": {
|
|
"type": "object",
|
|
"description": "Translations for each config flow step",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"description": "User-visible title of the step (will show integration name if omitted)"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Markdown description shown with the step (optional)"
|
|
},
|
|
"data": {
|
|
"type": "object",
|
|
"description": "Labels for input fields",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"data_description": {
|
|
"type": "object",
|
|
"description": "Descriptions for input fields",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"sections": {
|
|
"type": "object",
|
|
"description": "Labels for form sections (only if form has sections)",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Section label"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"error": {
|
|
"type": "object",
|
|
"description": "Error messages returned by the flow",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"abort": {
|
|
"type": "object",
|
|
"description": "Abort messages (supports Markdown)",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"progress": {
|
|
"type": "object",
|
|
"description": "Progress messages for async_show_progress (supports Markdown)",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"create_entry": {
|
|
"type": "object",
|
|
"description": "Success dialog messages (supports Markdown)",
|
|
"properties": {
|
|
"default": {
|
|
"type": "string",
|
|
"description": "Default message if async_create_entry called with description=None"
|
|
}
|
|
},
|
|
"additionalProperties": {
|
|
"type": "string",
|
|
"description": "Custom messages for specific description keys"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"options": {
|
|
"type": "object",
|
|
"description": "Translations for the options flow (same format as config)"
|
|
},
|
|
"config_subentries": {
|
|
"type": "object",
|
|
"description": "Translations for config subentry flows (map of subentry types, each with same format as config)",
|
|
"additionalProperties": {
|
|
"type": "object"
|
|
}
|
|
},
|
|
"selector": {
|
|
"type": "object",
|
|
"description": "Translations for selector options. The key is the translation_key set in SelectSelectorConfig. CRITICAL: Use selector.{translation_key}.options.{value}, NOT selector.select.{translation_key}",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"options": {
|
|
"type": "object",
|
|
"description": "Option label translations for select selectors. Keys must match the values passed in the options list.",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"unit_of_measurement": {
|
|
"type": "object",
|
|
"description": "Unit translations for number selectors",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"services": {
|
|
"type": "object",
|
|
"description": "Translations for service actions",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Service action name"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Service action description"
|
|
},
|
|
"fields": {
|
|
"type": "object",
|
|
"description": "Field translations",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Field name"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Field description"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"sections": {
|
|
"type": "object",
|
|
"description": "Collapsible section labels",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Section name"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"entity": {
|
|
"type": "object",
|
|
"description": "Translations for entities",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"description": "Entity domain (sensor, binary_sensor, etc.)",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"description": "Entity translation_key",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Entity name (only for entities with has_entity_name=True)"
|
|
},
|
|
"state": {
|
|
"type": "object",
|
|
"description": "State translations",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"state_attributes": {
|
|
"type": "object",
|
|
"description": "Entity state attribute translations",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Attribute name"
|
|
},
|
|
"state": {
|
|
"type": "object",
|
|
"description": "Attribute state translations",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"unit_of_measurement": {
|
|
"type": "string",
|
|
"description": "Unit of measurement translation (for sensor/number entities)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"entity_component": {
|
|
"type": "object",
|
|
"description": "Translations for entity components (if integration provides entities under its domain)",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"description": "Device class or '_' for default",
|
|
"properties": {
|
|
"state": {
|
|
"type": "object",
|
|
"description": "State translations for this device class",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"state_attributes": {
|
|
"type": "object",
|
|
"description": "Attribute name and state translations",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Attribute name"
|
|
},
|
|
"state": {
|
|
"type": "object",
|
|
"description": "Attribute state values",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"device": {
|
|
"type": "object",
|
|
"description": "Translations for device names",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"name": {
|
|
"type": "string",
|
|
"description": "Device name (set device's translation_key to use this)"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"device_automation": {
|
|
"type": "object",
|
|
"description": "Translations for device automations",
|
|
"properties": {
|
|
"action_type": {
|
|
"type": "object",
|
|
"description": "Device action translations",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"condition_type": {
|
|
"type": "object",
|
|
"description": "Device condition translations",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"trigger_type": {
|
|
"type": "object",
|
|
"description": "Device trigger translations",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"trigger_subtype": {
|
|
"type": "object",
|
|
"description": "Device trigger subtype translations (e.g., button names)",
|
|
"additionalProperties": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"exceptions": {
|
|
"type": "object",
|
|
"description": "Translations for HomeAssistantError and subclasses",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"message": {
|
|
"type": "string",
|
|
"description": "Exception message (supports placeholders)"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"issues": {
|
|
"type": "object",
|
|
"description": "Translations for repairs issues",
|
|
"additionalProperties": {
|
|
"type": "object",
|
|
"properties": {
|
|
"title": {
|
|
"type": "string",
|
|
"description": "Issue title"
|
|
},
|
|
"description": {
|
|
"type": "string",
|
|
"description": "Issue description (exactly one of 'description' or 'fix_flow' must be present)"
|
|
},
|
|
"fix_flow": {
|
|
"type": "object",
|
|
"description": "Repair flow translations (same format as config flow, exactly one of 'description' or 'fix_flow' must be present)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|