allow individual per source translations

each source should specify its own translations which will only apply for this source
and not other sources with the same argument name
This commit is contained in:
5ila5
2024-07-25 13:54:08 +02:00
committed by 5ila5
parent 9ec09566f8
commit b3521c7881
4 changed files with 3194 additions and 474 deletions

View File

@@ -484,32 +484,34 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
for arg in args:
default = args[arg].default
arg_name = args[arg].name
arg_key = f"{source}_{arg_name}"
field_type = None
annotation = args[arg].annotation
description = None
if args_input is not None and args[arg].name in args_input:
description = {"suggested_value": args_input[args[arg].name]}
if args_input is not None and arg_key in args_input:
description = {"suggested_value": args_input[arg_key]}
_LOGGER.debug(
f"Setting suggested value for {args[arg].name} to {args_input[args[arg].name]} (previously filled in)"
f"Setting suggested value for {arg_key} to {args_input[arg_key]} (previously filled in)"
)
elif args[arg].name in pre_filled:
elif arg_key in pre_filled:
_LOGGER.debug(
f"Setting default value for {args[arg].name} to {pre_filled[args[arg].name]}"
f"Setting default value for {arg_key} to {pre_filled[arg_key]}"
)
description = {
"suggested_value": pre_filled[args[arg].name],
"suggested_value": pre_filled[arg_key],
}
if annotation != inspect._empty:
field_type = (
await self.__get_type_by_annotation(annotation) or field_type
)
_LOGGER.debug(
f"Default for {args[arg].name}: {type(default) if default is not inspect.Signature.empty else inspect.Signature.empty}"
f"Default for {arg_key}: {type(default) if default is not inspect.Signature.empty else inspect.Signature.empty}"
)
if args[arg].name in MODULE_FLOW_TYPES:
flow_type = MODULE_FLOW_TYPES[args[arg].name]
if arg_name in MODULE_FLOW_TYPES:
flow_type = MODULE_FLOW_TYPES[arg_name]
if flow_type.get("type") == "SELECT":
field_type = SelectSelector(
SelectSelectorConfig(
@@ -530,14 +532,14 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
arg
].name in suggestions:
_LOGGER.debug(
f"Adding suggestions to {args[arg].name}: {suggestions[args[arg].name]}"
f"Adding suggestions to {arg_key}: {suggestions[arg_key]}"
)
# Add suggestions to the field if fetch/init raised an Exception with suggestions
field_type = SelectSelector(
SelectSelectorConfig(
options=[
SelectOptionDict(label=x, value=x)
for x in suggestions[args[arg].name]
for x in suggestions[arg_key]
],
mode=SelectSelectorMode.DROPDOWN,
custom_value=True,
@@ -546,7 +548,7 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
)
if default == inspect.Signature.empty:
vol_args[vol.Required(args[arg].name, description=description)] = (
vol_args[vol.Required(arg_key, description=description)] = (
field_type or str
)
@@ -554,7 +556,7 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
# Handle boolean, int, string, date, datetime, list defaults
vol_args[
vol.Optional(
args[arg].name,
arg_key,
default=UNDEFINED if default is None else default,
description=description,
)
@@ -563,7 +565,7 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
)
else:
_LOGGER.debug(
f"Unsupported type: {type(default)}: {args[arg].name}: {default}: {field_type}"
f"Unsupported type: {type(default)}: {arg_key}: {default}: {field_type}"
)
schema = vol.Schema(vol_args)
@@ -584,6 +586,7 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
"""
errors = {}
description_placeholders: dict[str, str] = {}
args_input = {k.removeprefix(f"{source}_"): v for k, v in args_input.items()}
if hasattr(module, "validate_params"):
errors.update(module.validate_params(args_input))
@@ -610,16 +613,17 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
except SourceArgumentSuggestionsExceptionBase as e:
if not hasattr(self, "_error_suggestions"):
self._error_suggestions = {}
self._error_suggestions.update({e.argument: e.suggestions})
errors[e.argument] = "invalid_arg"
arg_key = f"{source}_{e.argument}"
self._error_suggestions.update({arg_key: e.suggestions})
errors[arg_key] = "invalid_arg"
description_placeholders["invalid_arg_message"] = e.simple_message
if e.suggestion_type != str and e.suggestion_type != int:
description_placeholders["invalid_arg_message"] = e.message
except SourceArgumentRequired as e:
errors[e.argument] = "invalid_arg"
errors[f"{source}_{e.argument}"] = "invalid_arg"
description_placeholders["invalid_arg_message"] = e.message
except SourceArgumentException as e:
errors[e.argument] = "invalid_arg"
errors[f"{source}_{e.argument}"] = "invalid_arg"
description_placeholders["invalid_arg_message"] = e.message
except SourceArgumentExceptionMultiple as e:
description_placeholders["invalid_arg_message"] = e.message
@@ -627,7 +631,7 @@ class WasteCollectionConfigFlow(ConfigFlow, domain=DOMAIN): # type: ignore[call
errors["base"] = "invalid_arg"
else:
for arg in e.arguments:
errors[arg] = "invalid_arg"
errors[f"{source}_{arg}"] = "invalid_arg"
except Exception as e:
errors["base"] = "fetch_error"
description_placeholders["fetch_error_message"] = str(e)

View File

@@ -67,11 +67,180 @@
"title": "Quelle konfigurieren",
"description": "Konfiguriere deinen Service Provider. Für Details siehe die Quellen Dokumentation.",
"data": {
"ahk_heidekreis_de_city": "Ort",
"ahk_heidekreis_de_house_number": "Hausnummer",
"ahk_heidekreis_de_postcode": "PLZ",
"ahk_heidekreis_de_street": "Straße",
"art_trier_de_district": "Ort",
"art_trier_de_zip_code": "PLZ",
"asr_chemnitz_de_house_number": "Hausnummer",
"asr_chemnitz_de_object_number": "Objektnummer",
"asr_chemnitz_de_street": "Straße",
"awb_emsland_de_address_suffix": "Hausnummerzusatz",
"awb_emsland_de_city": "Ort",
"awb_emsland_de_house_number": "Hausnummer",
"awb_emsland_de_street": "Straße",
"awb_oldenburg_de_house_number": "Hausnummer",
"awb_oldenburg_de_street": "Straße",
"awbkoeln_de_building_number": "Hausnummer",
"awbkoeln_de_street_code": "Straßencode",
"awido_de_city": "Ort",
"awido_de_customer": "Kunde",
"awido_de_housenumber": "Hausnummer",
"awido_de_street": "Straße",
"awlneuss_de_building_number": "Hausnummer",
"awlneuss_de_street_code": "Straßencode",
"awlneuss_de_street_name": "Straßenname",
"awn_de_address_suffix": "Hausnummerzusatz",
"awn_de_city": "Ort",
"awn_de_house_number": "Hausnummer",
"awn_de_street": "Straße",
"awr_de_city": "Ort",
"awr_de_street": "Straße",
"awsh_de_city": "Ort",
"awsh_de_street": "Straße",
"berlin_recycling_de_password": "Passwort",
"berlin_recycling_de_username": "Benutzername",
"bielefeld_de_address_suffix": "Hausnummerzusatz",
"bielefeld_de_house_number": "Hausnummer",
"bielefeld_de_street": "Straße",
"bsr_de_abf_hausnr": "Hausnummer",
"bsr_de_abf_strasse": "Straße",
"buergerportal_de_district": "Ort",
"buergerportal_de_number": "Hausnummer",
"buergerportal_de_operator": "Betreiber",
"buergerportal_de_show_volume": "Große Container anzeigen",
"buergerportal_de_street": "Straße",
"buergerportal_de_subdistrict": "Ortsteil",
"calendar_title": "Kalender Titel",
"customer": "Kunde",
"street": "Straße",
"city": "Ort",
"housenumber": "Hausnummer"
"cederbaum_de_street": "Straße",
"dillingen_saar_de_street": "Straße",
"ead_darmstadt_de_street": "Straße",
"egn_abfallkalender_de_city": "Ort",
"egn_abfallkalender_de_district": "Ortsteil",
"egn_abfallkalender_de_housenumber": "Hausnummer",
"egn_abfallkalender_de_street": "Straße",
"eigenbetrieb_abfallwirtschaft_de_city": "Ort",
"eigenbetrieb_abfallwirtschaft_de_street": "Straße",
"erlangen_hoechstadt_de_city": "Ort",
"erlangen_hoechstadt_de_street": "Straße",
"geoport_nwm_de_district": "Ortsteil",
"hausmuell_info_hausnummer": "Hausnummer",
"hausmuell_info_ort": "Ort",
"hausmuell_info_ortsteil": "Ortsteil",
"hausmuell_info_strasse": "Straße",
"hausmuell_info_subdomain": "Subdomain",
"heilbronn_de_hausnr": "Hausnummer",
"heilbronn_de_plz": "PLZ",
"heilbronn_de_strasse": "Straße",
"ics_file": "Datei",
"ics_headers": "Headers",
"ics_method": "Methode",
"ics_offset": "Offset",
"ics_params": "Parameter",
"ics_regex": "Regulärer Ausdruck",
"ics_split_at": "Trennen bei",
"ics_title_template": "Titelvorlage",
"ics_url": "URL",
"ics_verify_ssl": "SSL-Verifizierung aktivieren",
"ics_version": "Version",
"ics_year_field": "Jahresfeld",
"infeo_at_city": "Ort",
"infeo_at_customer": "Kunde",
"infeo_at_housenumber": "Hausnummer",
"infeo_at_street": "Straße",
"infeo_at_zone": "Zone",
"insert_it_de_hnr": "Hausnummer",
"insert_it_de_location_id": "Standort ID",
"insert_it_de_municipality": "Ort",
"insert_it_de_street": "Straße",
"jumomind_de_area_id": "Bereich ID",
"jumomind_de_city": "Ort",
"jumomind_de_city_id": "Ort ID",
"jumomind_de_house_number": "Hausnummer",
"jumomind_de_service_id": "Service ID",
"jumomind_de_street": "Straße",
"karlsruhe_de_hnr": "Hausnummer",
"karlsruhe_de_ladeort": "Ladeort",
"karlsruhe_de_street": "Straße",
"korneuburg_stadtservice_at_street_name": "Straßenname",
"korneuburg_stadtservice_at_street_number": "Hausnummer",
"korneuburg_stadtservice_at_teilgebiet": "Teilgebiet",
"ks_boerde_de_house_number": "Hausnummer",
"ks_boerde_de_street": "Straße",
"ks_boerde_de_village": "Ort",
"kwb_goslar_de_pois": "POIS",
"kwu_de_city": "Ort",
"kwu_de_number": "Hausnummer",
"kwu_de_street": "Straße",
"landkreis_rhoen_grabfeld_city": "Ort",
"landkreis_rhoen_grabfeld_district": "Ortsteil",
"landkreis_wittmund_de_city": "Ort",
"landkreis_wittmund_de_street": "Straße",
"lindau_ch_city": "Ort",
"lrasha_de_location": "Gebiet",
"mags_de_number": "Hausnummer",
"mags_de_street": "Straße",
"mags_de_turnus": "Turnus",
"meinawb_de_address_suffix": "Hausnummerzusatz",
"meinawb_de_city": "Ort",
"meinawb_de_house_number": "Hausnummer",
"meinawb_de_street": "Strasse",
"monaloga_de_plz": "PLZ",
"monaloga_de_street": "Straße",
"muellabfuhr_de_city": "Ort",
"muellabfuhr_de_client": "Client",
"muellabfuhr_de_district": "Ortsteil",
"muellabfuhr_de_street": "Straße",
"muellmax_de_mm_frm_hnr_sel": "Hausnummer",
"muellmax_de_mm_frm_ort_sel": "Ort",
"muellmax_de_mm_frm_str_sel": "Straße",
"muellmax_de_service": "Service",
"muenchenstein_ch_waste_district": "Abfuhrkreis",
"offenbach_de_f_id_location": "Standort ID",
"potsdam_de_bio_rhythm": "Bio Rhythmus",
"potsdam_de_gelb_rhythm": "Gelb Rhythmus",
"potsdam_de_ortsteil": "Ortsteil",
"potsdam_de_papier_rhythm": "Papier Rhythmus",
"potsdam_de_rest_rhythm": "Restabfall Rhythmus",
"potsdam_de_strasse": "Straße",
"real_luzern_ch_municipality_id": "Orts ID",
"real_luzern_ch_street_id": "Strassen ID",
"regioentsorgung_de_city": "Ort",
"regioentsorgung_de_house_number": "Hausnummer",
"regioentsorgung_de_street": "Straße",
"rh_entsorgung_de_address_suffix": "Hausnummerzusatz",
"rh_entsorgung_de_city": "Ort",
"rh_entsorgung_de_house_number": "Hausnummer",
"rh_entsorgung_de_street": "Straße",
"sbazv_de_city": "Ort",
"sbazv_de_district": "Ortsteil",
"sbazv_de_street": "Straße",
"sector27_de_city": "Ort",
"sector27_de_street": "Straße",
"stuttgart_de_street": "Straße",
"stuttgart_de_streetnr": "Hausnummer",
"tbv_velbert_de_street": "Straße",
"tonnenleerung_de_url": "URL",
"was_wolfsburg_de_city": "Ort",
"was_wolfsburg_de_street": "Straße",
"wermelskirchen_de_house_number": "Hausnummer",
"wermelskirchen_de_street": "Straße",
"wsz_moosburg_at_address": "Adresse",
"wsz_moosburg_at_address_id": "Adressen ID",
"wsz_moosburg_at_municipal": "Gemeinde",
"wsz_moosburg_at_street": "Straße",
"wuerzburg_de_district": "Stadtteil",
"wuerzburg_de_street": "Straße",
"zakb_de_hnr": "Hausnummer",
"zakb_de_hnr_zusatz": "Hausnummerzusatz",
"zakb_de_ort": "Ort",
"zakb_de_strasse": "Straße",
"zva_sek_de_bezirk": "Abfuhrbezirk",
"zva_sek_de_ortsteil": "Ortsteil",
"zva_sek_de_strasse": "Straße",
"zva_wmk_de_city": "Ort",
"zva_wmk_de_street": "Straße"
},
"data_description": {
"calendar_title": "Ein lesbarerer oder benutzerfreundlicherer Name für den Müllkalender. Wenn nichts angegeben wird, wird der Name der Quelle verwendet."
@@ -110,11 +279,180 @@
"title": "Quelle Neu Konfigurieren",
"description": "Konfiguriere deinen Service Provider. Für Details siehe die Quellen Dokumentation.",
"data": {
"ahk_heidekreis_de_city": "Ort",
"ahk_heidekreis_de_house_number": "Hausnummer",
"ahk_heidekreis_de_postcode": "PLZ",
"ahk_heidekreis_de_street": "Straße",
"art_trier_de_district": "Ort",
"art_trier_de_zip_code": "PLZ",
"asr_chemnitz_de_house_number": "Hausnummer",
"asr_chemnitz_de_object_number": "Objektnummer",
"asr_chemnitz_de_street": "Straße",
"awb_emsland_de_address_suffix": "Hausnummerzusatz",
"awb_emsland_de_city": "Ort",
"awb_emsland_de_house_number": "Hausnummer",
"awb_emsland_de_street": "Straße",
"awb_oldenburg_de_house_number": "Hausnummer",
"awb_oldenburg_de_street": "Straße",
"awbkoeln_de_building_number": "Hausnummer",
"awbkoeln_de_street_code": "Straßencode",
"awido_de_city": "Ort",
"awido_de_customer": "Kunde",
"awido_de_housenumber": "Hausnummer",
"awido_de_street": "Straße",
"awlneuss_de_building_number": "Hausnummer",
"awlneuss_de_street_code": "Straßencode",
"awlneuss_de_street_name": "Straßenname",
"awn_de_address_suffix": "Hausnummerzusatz",
"awn_de_city": "Ort",
"awn_de_house_number": "Hausnummer",
"awn_de_street": "Straße",
"awr_de_city": "Ort",
"awr_de_street": "Straße",
"awsh_de_city": "Ort",
"awsh_de_street": "Straße",
"berlin_recycling_de_password": "Passwort",
"berlin_recycling_de_username": "Benutzername",
"bielefeld_de_address_suffix": "Hausnummerzusatz",
"bielefeld_de_house_number": "Hausnummer",
"bielefeld_de_street": "Straße",
"bsr_de_abf_hausnr": "Hausnummer",
"bsr_de_abf_strasse": "Straße",
"buergerportal_de_district": "Ort",
"buergerportal_de_number": "Hausnummer",
"buergerportal_de_operator": "Betreiber",
"buergerportal_de_show_volume": "Große Container anzeigen",
"buergerportal_de_street": "Straße",
"buergerportal_de_subdistrict": "Ortsteil",
"calendar_title": "Kalender Titel",
"customer": "Kunde",
"street": "Straße",
"city": "Ort",
"housenumber": "Hausnummer"
"cederbaum_de_street": "Straße",
"dillingen_saar_de_street": "Straße",
"ead_darmstadt_de_street": "Straße",
"egn_abfallkalender_de_city": "Ort",
"egn_abfallkalender_de_district": "Ortsteil",
"egn_abfallkalender_de_housenumber": "Hausnummer",
"egn_abfallkalender_de_street": "Straße",
"eigenbetrieb_abfallwirtschaft_de_city": "Ort",
"eigenbetrieb_abfallwirtschaft_de_street": "Straße",
"erlangen_hoechstadt_de_city": "Ort",
"erlangen_hoechstadt_de_street": "Straße",
"geoport_nwm_de_district": "Ortsteil",
"hausmuell_info_hausnummer": "Hausnummer",
"hausmuell_info_ort": "Ort",
"hausmuell_info_ortsteil": "Ortsteil",
"hausmuell_info_strasse": "Straße",
"hausmuell_info_subdomain": "Subdomain",
"heilbronn_de_hausnr": "Hausnummer",
"heilbronn_de_plz": "PLZ",
"heilbronn_de_strasse": "Straße",
"ics_file": "Datei",
"ics_headers": "Headers",
"ics_method": "Methode",
"ics_offset": "Offset",
"ics_params": "Parameter",
"ics_regex": "Regulärer Ausdruck",
"ics_split_at": "Trennen bei",
"ics_title_template": "Titelvorlage",
"ics_url": "URL",
"ics_verify_ssl": "SSL-Verifizierung aktivieren",
"ics_version": "Version",
"ics_year_field": "Jahresfeld",
"infeo_at_city": "Ort",
"infeo_at_customer": "Kunde",
"infeo_at_housenumber": "Hausnummer",
"infeo_at_street": "Straße",
"infeo_at_zone": "Zone",
"insert_it_de_hnr": "Hausnummer",
"insert_it_de_location_id": "Standort ID",
"insert_it_de_municipality": "Ort",
"insert_it_de_street": "Straße",
"jumomind_de_area_id": "Bereich ID",
"jumomind_de_city": "Ort",
"jumomind_de_city_id": "Ort ID",
"jumomind_de_house_number": "Hausnummer",
"jumomind_de_service_id": "Service ID",
"jumomind_de_street": "Straße",
"karlsruhe_de_hnr": "Hausnummer",
"karlsruhe_de_ladeort": "Ladeort",
"karlsruhe_de_street": "Straße",
"korneuburg_stadtservice_at_street_name": "Straßenname",
"korneuburg_stadtservice_at_street_number": "Hausnummer",
"korneuburg_stadtservice_at_teilgebiet": "Teilgebiet",
"ks_boerde_de_house_number": "Hausnummer",
"ks_boerde_de_street": "Straße",
"ks_boerde_de_village": "Ort",
"kwb_goslar_de_pois": "POIS",
"kwu_de_city": "Ort",
"kwu_de_number": "Hausnummer",
"kwu_de_street": "Straße",
"landkreis_rhoen_grabfeld_city": "Ort",
"landkreis_rhoen_grabfeld_district": "Ortsteil",
"landkreis_wittmund_de_city": "Ort",
"landkreis_wittmund_de_street": "Straße",
"lindau_ch_city": "Ort",
"lrasha_de_location": "Gebiet",
"mags_de_number": "Hausnummer",
"mags_de_street": "Straße",
"mags_de_turnus": "Turnus",
"meinawb_de_address_suffix": "Hausnummerzusatz",
"meinawb_de_city": "Ort",
"meinawb_de_house_number": "Hausnummer",
"meinawb_de_street": "Strasse",
"monaloga_de_plz": "PLZ",
"monaloga_de_street": "Straße",
"muellabfuhr_de_city": "Ort",
"muellabfuhr_de_client": "Client",
"muellabfuhr_de_district": "Ortsteil",
"muellabfuhr_de_street": "Straße",
"muellmax_de_mm_frm_hnr_sel": "Hausnummer",
"muellmax_de_mm_frm_ort_sel": "Ort",
"muellmax_de_mm_frm_str_sel": "Straße",
"muellmax_de_service": "Service",
"muenchenstein_ch_waste_district": "Abfuhrkreis",
"offenbach_de_f_id_location": "Standort ID",
"potsdam_de_bio_rhythm": "Bio Rhythmus",
"potsdam_de_gelb_rhythm": "Gelb Rhythmus",
"potsdam_de_ortsteil": "Ortsteil",
"potsdam_de_papier_rhythm": "Papier Rhythmus",
"potsdam_de_rest_rhythm": "Restabfall Rhythmus",
"potsdam_de_strasse": "Straße",
"real_luzern_ch_municipality_id": "Orts ID",
"real_luzern_ch_street_id": "Strassen ID",
"regioentsorgung_de_city": "Ort",
"regioentsorgung_de_house_number": "Hausnummer",
"regioentsorgung_de_street": "Straße",
"rh_entsorgung_de_address_suffix": "Hausnummerzusatz",
"rh_entsorgung_de_city": "Ort",
"rh_entsorgung_de_house_number": "Hausnummer",
"rh_entsorgung_de_street": "Straße",
"sbazv_de_city": "Ort",
"sbazv_de_district": "Ortsteil",
"sbazv_de_street": "Straße",
"sector27_de_city": "Ort",
"sector27_de_street": "Straße",
"stuttgart_de_street": "Straße",
"stuttgart_de_streetnr": "Hausnummer",
"tbv_velbert_de_street": "Straße",
"tonnenleerung_de_url": "URL",
"was_wolfsburg_de_city": "Ort",
"was_wolfsburg_de_street": "Straße",
"wermelskirchen_de_house_number": "Hausnummer",
"wermelskirchen_de_street": "Straße",
"wsz_moosburg_at_address": "Adresse",
"wsz_moosburg_at_address_id": "Adressen ID",
"wsz_moosburg_at_municipal": "Gemeinde",
"wsz_moosburg_at_street": "Straße",
"wuerzburg_de_district": "Stadtteil",
"wuerzburg_de_street": "Straße",
"zakb_de_hnr": "Hausnummer",
"zakb_de_hnr_zusatz": "Hausnummerzusatz",
"zakb_de_ort": "Ort",
"zakb_de_strasse": "Straße",
"zva_sek_de_bezirk": "Abfuhrbezirk",
"zva_sek_de_ortsteil": "Ortsteil",
"zva_sek_de_strasse": "Straße",
"zva_wmk_de_city": "Ort",
"zva_wmk_de_street": "Straße"
}
}
},

View File

@@ -34,6 +34,7 @@ START_SERVICE_SECTION = "<!--Begin of service section-->"
END_SERVICE_SECTION = "<!--End of service section-->"
LANGUAGES = ["en", "de"]
ARG_TRANSLATIONS_TO_KEEP = ["calendar_title"]
class SourceInfo:
@@ -401,20 +402,12 @@ def update_json(
"default_params": e.extra_info_default_params,
}
)
params.update(e.params)
params.update([f"{e.module}_{p}" for p in e.params])
for lang, translations in e.custom_param_translation.items():
if lang in param_translations:
for key, value in translations.items():
if (
key in param_translations[lang]
and value != param_translations[lang][key]
):
print(
f'Conflicting translations for language {lang} "{key}" => "{value}" ({e.module}) AND "{param_translations[lang][key]}"'
)
param_translations[lang].update(translations)
param_translations[lang].update(
{f"{e.module}_{k}": v for k, v in translations.items()}
)
else:
param_translations[lang] = translations.copy()
@@ -434,9 +427,13 @@ def update_json(
) as f:
translations = json.load(f)
arg_translations = translations["config"]["step"]["args"]["data"]
arg_translations = {}
for key, value in translations["config"]["step"]["args"]["data"].items():
if key in ARG_TRANSLATIONS_TO_KEEP:
arg_translations[key] = value
for param in params:
param = f"{param}"
if param in param_translations.get(lang, {}):
arg_translations[param] = param_translations[lang][param]
elif lang == "en" and param not in arg_translations:
@@ -444,6 +441,9 @@ def update_json(
[s.capitalize() for s in split_camel_and_snake_case(param)]
)
arg_translations = {k: arg_translations[k] for k in sorted(arg_translations)}
translations["config"]["step"]["args"]["data"] = arg_translations
translations["config"]["step"]["reconfigure"]["data"] = arg_translations
with open(