mirror of
https://github.com/jpawlowski/hass.tibber_prices.git
synced 2026-03-29 21:03:40 +00:00
fix(options_flow): enhance translation handling for config fields and update language fallback
This commit is contained in:
parent
89880c7755
commit
1bf031ba19
7 changed files with 107 additions and 92 deletions
|
|
@ -357,16 +357,23 @@ class TibberPricesOptionsFlowHandler(OptionsFlow):
|
||||||
"""
|
"""
|
||||||
Load override translations from common section.
|
Load override translations from common section.
|
||||||
|
|
||||||
|
Uses the system language setting from Home Assistant.
|
||||||
|
Note: HA Options Flow does not provide user_id in context,
|
||||||
|
so we cannot determine the individual user's language preference.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
Dictionary with override_warning_template, override_warning_and,
|
Dictionary with override_warning_template, override_warning_and,
|
||||||
and override_field_labels keys
|
and override_field_label_* keys for each config field.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
language = self.hass.config.language
|
# Use system language - HA Options Flow context doesn't include user_id
|
||||||
|
language = self.hass.config.language or "en"
|
||||||
|
_LOGGER.debug("Loading override translations for language: %s", language)
|
||||||
translations: dict[str, Any] = {}
|
translations: dict[str, Any] = {}
|
||||||
|
|
||||||
# Load template, and connector, and field labels from common section
|
# Load template and connector from common section
|
||||||
template = await async_get_translation(self.hass, ["common", "override_warning_template"], language)
|
template = await async_get_translation(self.hass, ["common", "override_warning_template"], language)
|
||||||
|
_LOGGER.debug("Loaded template: %s", template)
|
||||||
if template:
|
if template:
|
||||||
translations["override_warning_template"] = template
|
translations["override_warning_template"] = template
|
||||||
|
|
||||||
|
|
@ -374,9 +381,28 @@ class TibberPricesOptionsFlowHandler(OptionsFlow):
|
||||||
if and_connector:
|
if and_connector:
|
||||||
translations["override_warning_and"] = and_connector
|
translations["override_warning_and"] = and_connector
|
||||||
|
|
||||||
field_labels = await async_get_translation(self.hass, ["common", "override_field_labels"], language)
|
# Load flat field label translations
|
||||||
if field_labels:
|
field_keys = [
|
||||||
translations["override_field_labels"] = field_labels
|
"best_price_min_period_length",
|
||||||
|
"best_price_max_level_gap_count",
|
||||||
|
"best_price_flex",
|
||||||
|
"best_price_min_distance_from_avg",
|
||||||
|
"enable_min_periods_best",
|
||||||
|
"min_periods_best",
|
||||||
|
"relaxation_attempts_best",
|
||||||
|
"peak_price_min_period_length",
|
||||||
|
"peak_price_max_level_gap_count",
|
||||||
|
"peak_price_flex",
|
||||||
|
"peak_price_min_distance_from_avg",
|
||||||
|
"enable_min_periods_peak",
|
||||||
|
"min_periods_peak",
|
||||||
|
"relaxation_attempts_peak",
|
||||||
|
]
|
||||||
|
for field_key in field_keys:
|
||||||
|
translation_key = f"override_field_label_{field_key}"
|
||||||
|
label = await async_get_translation(self.hass, ["common", translation_key], language)
|
||||||
|
if label:
|
||||||
|
translations[translation_key] = label
|
||||||
|
|
||||||
return translations
|
return translations
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -245,14 +245,13 @@ def get_section_override_warning(
|
||||||
section_keys = SECTION_CONFIG_KEYS.get(step_id, {}).get(section_id, [])
|
section_keys = SECTION_CONFIG_KEYS.get(step_id, {}).get(section_id, [])
|
||||||
overridden_fields = []
|
overridden_fields = []
|
||||||
|
|
||||||
# Get field labels from translations or use fallback
|
|
||||||
field_labels = DEFAULT_FIELD_LABELS
|
|
||||||
if translations and "override_field_labels" in translations:
|
|
||||||
field_labels = translations["override_field_labels"]
|
|
||||||
|
|
||||||
for config_key in section_keys:
|
for config_key in section_keys:
|
||||||
if is_field_overridden(config_key, section_id, overrides):
|
if is_field_overridden(config_key, section_id, overrides):
|
||||||
label = field_labels.get(config_key, config_key)
|
# Try to get translated label from flat keys, fallback to DEFAULT_FIELD_LABELS
|
||||||
|
translation_key = f"override_field_label_{config_key}"
|
||||||
|
label = (translations.get(translation_key) if translations else None) or DEFAULT_FIELD_LABELS.get(
|
||||||
|
config_key, config_key
|
||||||
|
)
|
||||||
overridden_fields.append(label)
|
overridden_fields.append(label)
|
||||||
|
|
||||||
if not overridden_fields:
|
if not overridden_fields:
|
||||||
|
|
|
||||||
|
|
@ -80,22 +80,20 @@
|
||||||
"step_progress": "{step_num} / {total_steps}",
|
"step_progress": "{step_num} / {total_steps}",
|
||||||
"override_warning_template": "⚠️ {fields} wird durch Konfigurations-Entität gesteuert",
|
"override_warning_template": "⚠️ {fields} wird durch Konfigurations-Entität gesteuert",
|
||||||
"override_warning_and": "und",
|
"override_warning_and": "und",
|
||||||
"override_field_labels": {
|
"override_field_label_best_price_min_period_length": "Mindestperiodenlänge",
|
||||||
"best_price_min_period_length": "Mindestperiodenlänge",
|
"override_field_label_best_price_max_level_gap_count": "Lückentoleranz",
|
||||||
"best_price_max_level_gap_count": "Lückentoleranz",
|
"override_field_label_best_price_flex": "Flexibilität",
|
||||||
"best_price_flex": "Flexibilität",
|
"override_field_label_best_price_min_distance_from_avg": "Mindestabstand",
|
||||||
"best_price_min_distance_from_avg": "Mindestabstand",
|
"override_field_label_enable_min_periods_best": "Mindestzahl erreichen",
|
||||||
"enable_min_periods_best": "Mindestzahl erreichen",
|
"override_field_label_min_periods_best": "Mindestperioden",
|
||||||
"min_periods_best": "Mindestperioden",
|
"override_field_label_relaxation_attempts_best": "Lockerungsversuche",
|
||||||
"relaxation_attempts_best": "Lockerungsversuche",
|
"override_field_label_peak_price_min_period_length": "Mindestperiodenlänge",
|
||||||
"peak_price_min_period_length": "Mindestperiodenlänge",
|
"override_field_label_peak_price_max_level_gap_count": "Lückentoleranz",
|
||||||
"peak_price_max_level_gap_count": "Lückentoleranz",
|
"override_field_label_peak_price_flex": "Flexibilität",
|
||||||
"peak_price_flex": "Flexibilität",
|
"override_field_label_peak_price_min_distance_from_avg": "Mindestabstand",
|
||||||
"peak_price_min_distance_from_avg": "Mindestabstand",
|
"override_field_label_enable_min_periods_peak": "Mindestzahl erreichen",
|
||||||
"enable_min_periods_peak": "Mindestzahl erreichen",
|
"override_field_label_min_periods_peak": "Mindestperioden",
|
||||||
"min_periods_peak": "Mindestperioden",
|
"override_field_label_relaxation_attempts_peak": "Lockerungsversuche"
|
||||||
"relaxation_attempts_peak": "Lockerungsversuche"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"config_subentries": {
|
"config_subentries": {
|
||||||
"home": {
|
"home": {
|
||||||
|
|
|
||||||
|
|
@ -80,22 +80,20 @@
|
||||||
"step_progress": "{step_num} / {total_steps}",
|
"step_progress": "{step_num} / {total_steps}",
|
||||||
"override_warning_template": "⚠️ {fields} controlled by config entity",
|
"override_warning_template": "⚠️ {fields} controlled by config entity",
|
||||||
"override_warning_and": "and",
|
"override_warning_and": "and",
|
||||||
"override_field_labels": {
|
"override_field_label_best_price_min_period_length": "Minimum Period Length",
|
||||||
"best_price_min_period_length": "Minimum Period Length",
|
"override_field_label_best_price_max_level_gap_count": "Gap Tolerance",
|
||||||
"best_price_max_level_gap_count": "Gap Tolerance",
|
"override_field_label_best_price_flex": "Flexibility",
|
||||||
"best_price_flex": "Flexibility",
|
"override_field_label_best_price_min_distance_from_avg": "Minimum Distance",
|
||||||
"best_price_min_distance_from_avg": "Minimum Distance",
|
"override_field_label_enable_min_periods_best": "Achieve Minimum Count",
|
||||||
"enable_min_periods_best": "Achieve Minimum Count",
|
"override_field_label_min_periods_best": "Minimum Periods",
|
||||||
"min_periods_best": "Minimum Periods",
|
"override_field_label_relaxation_attempts_best": "Relaxation Attempts",
|
||||||
"relaxation_attempts_best": "Relaxation Attempts",
|
"override_field_label_peak_price_min_period_length": "Minimum Period Length",
|
||||||
"peak_price_min_period_length": "Minimum Period Length",
|
"override_field_label_peak_price_max_level_gap_count": "Gap Tolerance",
|
||||||
"peak_price_max_level_gap_count": "Gap Tolerance",
|
"override_field_label_peak_price_flex": "Flexibility",
|
||||||
"peak_price_flex": "Flexibility",
|
"override_field_label_peak_price_min_distance_from_avg": "Minimum Distance",
|
||||||
"peak_price_min_distance_from_avg": "Minimum Distance",
|
"override_field_label_enable_min_periods_peak": "Achieve Minimum Count",
|
||||||
"enable_min_periods_peak": "Achieve Minimum Count",
|
"override_field_label_min_periods_peak": "Minimum Periods",
|
||||||
"min_periods_peak": "Minimum Periods",
|
"override_field_label_relaxation_attempts_peak": "Relaxation Attempts"
|
||||||
"relaxation_attempts_peak": "Relaxation Attempts"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"config_subentries": {
|
"config_subentries": {
|
||||||
"home": {
|
"home": {
|
||||||
|
|
|
||||||
|
|
@ -80,22 +80,20 @@
|
||||||
"step_progress": "{step_num} / {total_steps}",
|
"step_progress": "{step_num} / {total_steps}",
|
||||||
"override_warning_template": "⚠️ {fields} styres av konfigurasjons-entitet",
|
"override_warning_template": "⚠️ {fields} styres av konfigurasjons-entitet",
|
||||||
"override_warning_and": "og",
|
"override_warning_and": "og",
|
||||||
"override_field_labels": {
|
"override_field_label_best_price_min_period_length": "Minste periodelengde",
|
||||||
"best_price_min_period_length": "Minste periodelengde",
|
"override_field_label_best_price_max_level_gap_count": "Gaptoleranse",
|
||||||
"best_price_max_level_gap_count": "Gaptoleranse",
|
"override_field_label_best_price_flex": "Fleksibilitet",
|
||||||
"best_price_flex": "Fleksibilitet",
|
"override_field_label_best_price_min_distance_from_avg": "Minimumsavstand",
|
||||||
"best_price_min_distance_from_avg": "Minimumsavstand",
|
"override_field_label_enable_min_periods_best": "Oppnå minimum antall",
|
||||||
"enable_min_periods_best": "Oppnå minimum antall",
|
"override_field_label_min_periods_best": "Minimumperioder",
|
||||||
"min_periods_best": "Minimumperioder",
|
"override_field_label_relaxation_attempts_best": "Avslapningsforsøk",
|
||||||
"relaxation_attempts_best": "Avslapningsforsøk",
|
"override_field_label_peak_price_min_period_length": "Minste periodelengde",
|
||||||
"peak_price_min_period_length": "Minste periodelengde",
|
"override_field_label_peak_price_max_level_gap_count": "Gaptoleranse",
|
||||||
"peak_price_max_level_gap_count": "Gaptoleranse",
|
"override_field_label_peak_price_flex": "Fleksibilitet",
|
||||||
"peak_price_flex": "Fleksibilitet",
|
"override_field_label_peak_price_min_distance_from_avg": "Minimumsavstand",
|
||||||
"peak_price_min_distance_from_avg": "Minimumsavstand",
|
"override_field_label_enable_min_periods_peak": "Oppnå minimum antall",
|
||||||
"enable_min_periods_peak": "Oppnå minimum antall",
|
"override_field_label_min_periods_peak": "Minimumperioder",
|
||||||
"min_periods_peak": "Minimumperioder",
|
"override_field_label_relaxation_attempts_peak": "Avslapningsforsøk"
|
||||||
"relaxation_attempts_peak": "Avslapningsforsøk"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"config_subentries": {
|
"config_subentries": {
|
||||||
"home": {
|
"home": {
|
||||||
|
|
|
||||||
|
|
@ -80,22 +80,20 @@
|
||||||
"step_progress": "{step_num} / {total_steps}",
|
"step_progress": "{step_num} / {total_steps}",
|
||||||
"override_warning_template": "⚠️ {fields} wordt beheerd door configuratie-entiteit",
|
"override_warning_template": "⚠️ {fields} wordt beheerd door configuratie-entiteit",
|
||||||
"override_warning_and": "en",
|
"override_warning_and": "en",
|
||||||
"override_field_labels": {
|
"override_field_label_best_price_min_period_length": "Minimale periodelengte",
|
||||||
"best_price_min_period_length": "Minimale periodelengte",
|
"override_field_label_best_price_max_level_gap_count": "Gaptolerantie",
|
||||||
"best_price_max_level_gap_count": "Gaptolerantie",
|
"override_field_label_best_price_flex": "Flexibiliteit",
|
||||||
"best_price_flex": "Flexibiliteit",
|
"override_field_label_best_price_min_distance_from_avg": "Minimale afstand",
|
||||||
"best_price_min_distance_from_avg": "Minimale afstand",
|
"override_field_label_enable_min_periods_best": "Minimum aantal bereiken",
|
||||||
"enable_min_periods_best": "Minimum aantal bereiken",
|
"override_field_label_min_periods_best": "Minimale periodes",
|
||||||
"min_periods_best": "Minimale periodes",
|
"override_field_label_relaxation_attempts_best": "Ontspanningspogingen",
|
||||||
"relaxation_attempts_best": "Ontspanningspogingen",
|
"override_field_label_peak_price_min_period_length": "Minimale periodelengte",
|
||||||
"peak_price_min_period_length": "Minimale periodelengte",
|
"override_field_label_peak_price_max_level_gap_count": "Gaptolerantie",
|
||||||
"peak_price_max_level_gap_count": "Gaptolerantie",
|
"override_field_label_peak_price_flex": "Flexibiliteit",
|
||||||
"peak_price_flex": "Flexibiliteit",
|
"override_field_label_peak_price_min_distance_from_avg": "Minimale afstand",
|
||||||
"peak_price_min_distance_from_avg": "Minimale afstand",
|
"override_field_label_enable_min_periods_peak": "Minimum aantal bereiken",
|
||||||
"enable_min_periods_peak": "Minimum aantal bereiken",
|
"override_field_label_min_periods_peak": "Minimale periodes",
|
||||||
"min_periods_peak": "Minimale periodes",
|
"override_field_label_relaxation_attempts_peak": "Ontspanningspogingen"
|
||||||
"relaxation_attempts_peak": "Ontspanningspogingen"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"config_subentries": {
|
"config_subentries": {
|
||||||
"home": {
|
"home": {
|
||||||
|
|
|
||||||
|
|
@ -80,22 +80,20 @@
|
||||||
"step_progress": "{step_num} / {total_steps}",
|
"step_progress": "{step_num} / {total_steps}",
|
||||||
"override_warning_template": "⚠️ {fields} styrs av konfigurationsentitet",
|
"override_warning_template": "⚠️ {fields} styrs av konfigurationsentitet",
|
||||||
"override_warning_and": "och",
|
"override_warning_and": "och",
|
||||||
"override_field_labels": {
|
"override_field_label_best_price_min_period_length": "Minsta periodlängd",
|
||||||
"best_price_min_period_length": "Minsta periodlängd",
|
"override_field_label_best_price_max_level_gap_count": "Glappstolerans",
|
||||||
"best_price_max_level_gap_count": "Glappstolerans",
|
"override_field_label_best_price_flex": "Flexibilitet",
|
||||||
"best_price_flex": "Flexibilitet",
|
"override_field_label_best_price_min_distance_from_avg": "Minsta avstånd",
|
||||||
"best_price_min_distance_from_avg": "Minsta avstånd",
|
"override_field_label_enable_min_periods_best": "Uppnå minsta antal",
|
||||||
"enable_min_periods_best": "Uppnå minsta antal",
|
"override_field_label_min_periods_best": "Minimiperioder",
|
||||||
"min_periods_best": "Minimiperioder",
|
"override_field_label_relaxation_attempts_best": "Avslappningsförsök",
|
||||||
"relaxation_attempts_best": "Avslappningsförsök",
|
"override_field_label_peak_price_min_period_length": "Minsta periodlängd",
|
||||||
"peak_price_min_period_length": "Minsta periodlängd",
|
"override_field_label_peak_price_max_level_gap_count": "Glappstolerans",
|
||||||
"peak_price_max_level_gap_count": "Glappstolerans",
|
"override_field_label_peak_price_flex": "Flexibilitet",
|
||||||
"peak_price_flex": "Flexibilitet",
|
"override_field_label_peak_price_min_distance_from_avg": "Minsta avstånd",
|
||||||
"peak_price_min_distance_from_avg": "Minsta avstånd",
|
"override_field_label_enable_min_periods_peak": "Uppnå minsta antal",
|
||||||
"enable_min_periods_peak": "Uppnå minsta antal",
|
"override_field_label_min_periods_peak": "Minimiperioder",
|
||||||
"min_periods_peak": "Minimiperioder",
|
"override_field_label_relaxation_attempts_peak": "Avslappningsförsök"
|
||||||
"relaxation_attempts_peak": "Avslappningsförsök"
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
"config_subentries": {
|
"config_subentries": {
|
||||||
"home": {
|
"home": {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue