Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@

- Danish (`da`) localization. Adds `src/localization/da.js` with all 925 keys translated via DeepL using a glossary that locks brand names (HOMEii Flow, Music Assistant, Sendspin, Spotify, etc.) and music-domain terms (Library, Queue, Playlist, etc.) to consistent renderings. Registered in `src/localization/index.js` and exposed as "Dansk" in the language picker. Native Danish speaker review by submitter (Danish household using the card daily for kids' room dashboards).

### Fixed

- Danish localization: 20 broken or wrong interpolation placeholders in `src/localization/da.js`. The original DeepL pass translated placeholder tokens themselves into Danish words (e.g. `{minutes}` → `{minutter}`, `{title}` → `{titel}`, `{player}` → `{afspiller}`, `{source}`/`{target}` → `{kilde}`/`{mål}`, `{mood}` → `{stemning}`, etc.) and these slipped past the original native-review pass. The runtime substitutes by exact token name, so the Danish strings showed the bare `{titel}` / `{minutter}` / etc. at runtime instead of the actual value. One key (`ui.player_count_many`) was outright broken: missing closing brace and missing token entirely. All 20 placeholders restored to their English token names, surrounding Danish text preserved.
- Danish localization: `ui.disabled` corrected from "Handicappet" (means "handicapped") to "Inaktiv" — the right word for a UI off-state.

## 5.8.1 - 2026-05-31

Focused hotfix release for Music Assistant compatibility and artwork regressions found after 5.8.0.
Expand Down
42 changes: 21 additions & 21 deletions dist/homeii-music-flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -963,11 +963,11 @@ const messages$6 = Object.freeze({
"ui.announcement_failed_with_error": "Meddelelse mislykkedes{error}",
"ui.announcement_language": "Sprog for annoncering",
"ui.announcement_presets": "Forudindstillinger for annoncering",
"ui.announcement_sent_to_player": "Meddelelse sendt til {afspiller}.",
"ui.announcement_sent_to_player": "Meddelelse sendt til {player}.",
"ui.announcement_studio": "announcement studio",
"ui.announcement_studio_2": "Announcement Studio",
"ui.announcement_target": "Mål for annoncering",
"ui.announcement_to_player_preview": "Meddelelse til {afspiller}: {forhåndsvisning}",
"ui.announcement_to_player_preview": "Meddelelse til {player}: {preview}",
"ui.announcement_volume_boost": "Forøgelse af lydstyrken ved annoncering",
"ui.announcements": "Meddelelser",
"ui.appearance": "Udseende",
Expand Down Expand Up @@ -1101,7 +1101,7 @@ const messages$6 = Object.freeze({
"ui.delete_schedule": "Slet tidsplan",
"ui.descending": "Nedadgående",
"ui.dictate": "Diktere",
"ui.disabled": "Handicappet",
"ui.disabled": "Inaktiv",
"ui.disables_blur_animations_dynamic_backgrounds_and_heavy_shadows_recommend": "Deaktiverer sløring, animationer, dynamiske baggrunde og kraftige skygger. Anbefales til Nest Hub og svagere tablets.",
"ui.disconnect": "Afbryd forbindelsen",
"ui.disconnect_all": "Afbryd alle forbindelser",
Expand Down Expand Up @@ -1258,7 +1258,7 @@ const messages$6 = Object.freeze({
"ui.media_2": "Medier",
"ui.media_actions": "Handlinger i medierne",
"ui.media_layout": "Medielayout",
"ui.media_selected_target": "Udvalgt: {media} ? Mål: {mål}",
"ui.media_selected_target": "Udvalgt: {media} ? Mål: {target}",
"ui.menu": "Menu",
"ui.message": "Besked",
"ui.microphone": "Mikrofon",
Expand Down Expand Up @@ -1296,7 +1296,7 @@ const messages$6 = Object.freeze({
"ui.night": "Nat",
"ui.night_end_time": "Sluttidspunkt for natten",
"ui.night_mode": "Nattilstand",
"ui.night_mode_auto_window": "Nattilstand auto {start}-{slut}",
"ui.night_mode_auto_window": "Nattilstand auto {start}-{end}",
"ui.night_mode_days": "Nattilstand dage",
"ui.night_mode_is_always_on": "Nattilstand er altid slået til",
"ui.night_mode_is_off": "Nattilstand er slået fra",
Expand Down Expand Up @@ -1416,7 +1416,7 @@ const messages$6 = Object.freeze({
"ui.playback_started": "Afspilning startet",
"ui.player": "Afspiller",
"ui.player_2": "Afspiller",
"ui.player_count_many": "{Afspillere",
"ui.player_count_many": "{count} afspillere",
"ui.player_count_one": "1 Afspiller",
"ui.player_groups_could_not_be_disconnected": "Grupper af Afspillere kunne ikke afbrydes",
"ui.player_is_pinned_from_settings": "Afspilleren er fastgjort fra indstillingerne",
Expand Down Expand Up @@ -1524,7 +1524,7 @@ const messages$6 = Object.freeze({
"ui.scheduled_start_cleared": "Planlagt start ryddet",
"ui.scheduled_start_failed": "Planlagt start mislykkedes",
"ui.scheduled_start_saved": "Planlagt start gemt",
"ui.scheduled_starts_active_count": "{antal} planlagte starter aktiv",
"ui.scheduled_starts_active_count": "{count} planlagte starter aktiv",
"ui.schedules": "Skemaer",
"ui.search": "Søg",
"ui.search_and_choose_play_next_add_radio_or_like": "Søg og vælg Play, Next, Add, Radio eller Like.",
Expand Down Expand Up @@ -1574,16 +1574,16 @@ const messages$6 = Object.freeze({
"ui.skipped_to_up_next": "Sprang til næste side",
"ui.sleep_timer": "Sleep-timer",
"ui.sleep_timer_2": "Sleep-timer",
"ui.sleep_timer_active_remaining": "Sleep-timer aktiv: {forbliver}.",
"ui.sleep_timer_added_minutes": "Tilføjede {minutter} minutter til timeren",
"ui.sleep_timer_active_remaining": "Sleep-timer aktiv: {remaining}.",
"ui.sleep_timer_added_minutes": "Tilføjede {minutes} minutter til timeren",
"ui.sleep_timer_and_morning_playback": "Sleep timer og morgenafspilning",
"ui.sleep_timer_and_scheduled_playback": "Sleep-timer og planlagt afspilning",
"ui.sleep_timer_cleared": "Sleep-timer ryddet",
"ui.sleep_timer_finished": "Sleep-timer færdig",
"ui.sleep_timer_presets": "Forudindstillede sleep-timer",
"ui.sleep_timer_set_for_15_minutes": "Sleep-timer indstillet til 15 minutter",
"ui.sleep_timer_set_minutes": "Sleep-timer indstillet til {minutter} minutter",
"ui.sleep_timer_updated_minutes": "Sleep-timer opdateret til {minutter} minutter",
"ui.sleep_timer_set_minutes": "Sleep-timer indstillet til {minutes} minutter",
"ui.sleep_timer_updated_minutes": "Sleep-timer opdateret til {minutes} minutter",
"ui.smaller_lyrics": "Mindre tekster",
"ui.smart": "Smart",
"ui.smart_mix": "smart blanding",
Expand Down Expand Up @@ -1651,7 +1651,7 @@ const messages$6 = Object.freeze({
"ui.this_device_player_disconnected": "Afspilleren af denne enhed er frakoblet",
"ui.thu": "Torsdag",
"ui.timer": "Timer",
"ui.timer_active_remaining": "Timer aktiv: {resterende}",
"ui.timer_active_remaining": "Timer aktiv: {remaining}",
"ui.timers": "Timere",
"ui.to": "Til",
"ui.today": "I dag",
Expand Down Expand Up @@ -1686,7 +1686,7 @@ const messages$6 = Object.freeze({
"ui.move_up": "Bevæg dig opad",
"ui.up_next": "Næste gang",
"ui.up_next_2": "Næste",
"ui.up_next_title": "Næste gang: {titel}",
"ui.up_next_title": "Næste gang: {title}",
"ui.upbeat_and_moving": "Upbeat og bevægende",
"ui.use_any_home_assistant_path_example_lovelace_home": "Brug en hvilken som helst sti til Home Assistant. Eksempel: /lovelace/hjem",
"ui.use_current_view_for_home_button": "Brug den aktuelle visning som startknap",
Expand Down Expand Up @@ -1717,7 +1717,7 @@ const messages$6 = Object.freeze({
"ui.voice_assistant_listening": "Lytter efter en kommando...",
"ui.voice_assistant_mode": "Stemmeassistent-tilstand",
"ui.voice_command_executed": "Stemmekommando udført",
"ui.voice_command_completed_action": "Færdig: {Handlinger}",
"ui.voice_command_completed_action": "Færdig: {action}",
"ui.voice_command_failed": "Stemmekommando mislykkedes",
"ui.voice_command_no_player": "Vælg en afspiller, eller sig afspillerens navn.",
"ui.voice_command_not_understood": "Jeg kunne ikke forstå den kommando.",
Expand All @@ -1728,16 +1728,16 @@ const messages$6 = Object.freeze({
"ui.voice_group_connect_needs_players": "Sig mindst to spilleres navne, eller vælg en spiller og sig den anden.",
"ui.voice_group_connected_players": "Forbundet {primary} med {members}.",
"ui.voice_group_disconnect_needs_player": "Sig, hvilken gruppe afspillere der skal afbrydes.",
"ui.voice_group_disconnected_player": "Afbrød gruppen for {afspiller}.",
"ui.voice_group_disconnected_player": "Afbrød gruppen for {player}.",
"ui.voice_input_failed": "Stemmeinput mislykkedes",
"ui.voice_input_is_not_supported_on_this_device": "Stemmeinput er ikke understøttet på denne enhed",
"ui.voice_language_is_not_supported": "Denne browser understøtter ikke det valgte sprog til talegenkendelse.",
"ui.voice_match_not_confident": 'Jeg fandt {title}, men den matcher ikke "{query}" tæt nok. Prøv at sige sangen og kunstneren igen.',
"ui.voice_music_searching": "Søg efter musik: {query}",
"ui.voice_playing_result": "Spiller {titel}",
"ui.voice_playing_result": "Spiller {title}",
"ui.voice_queue_transfer_needs_players": "Sig kilde- og målafspiller, for eksempel: overfør kø fra stue til køkken.",
"ui.voice_queue_transferred_between": "Kø overført fra {kilde} til {mål}.",
"ui.voice_starting_playback": "Starter {titel}...",
"ui.voice_queue_transferred_between": "Kø overført fra {source} til {target}.",
"ui.voice_starting_playback": "Starter {title}...",
"ui.voice_processing_status": "Behandler kommando...",
"ui.voice_ready_status": "Klar",
"ui.voice_recognition_network_failed": "Talegenkendelsestjenesten er ikke tilgængelig. Mikrofontilladelsen er muligvis OK; tjek browseren, VPN, DNS, firewall eller netværk.",
Expand Down Expand Up @@ -1787,12 +1787,12 @@ const messages$6 = Object.freeze({
"ui.discovery": "Opdagelse",
"ui.discovery_failed": "Opdagelsestilstand mislykkedes",
"ui.discovery_mode": "Opdagelsestilstand",
"ui.discovery_started": "Opdagelsen er begyndt: {stemning}",
"ui.discovery_started": "Opdagelsen er begyndt: {mood}",
"ui.maximum_brightness_for_music_lighting": "Maksimal lysstyrke til musikbelysning.",
"ui.minimum_seconds_between_light_updates": "Minimum sekunder mellem lysopdateringer.",
"ui.player_light_pair_lights": "Farve lys {antal}",
"ui.player_light_pair_lights": "Farve lys {number}",
"ui.player_light_pair_lights_helper": "Vælg farveegnede lys til denne Music Assistant-afspiller. Ryd dette felt eller Afspilleren for at fjerne parret.",
"ui.player_light_pair_player": "Music Assistant afspiller {nummer}",
"ui.player_light_pair_player": "Music Assistant afspiller {number}",
"ui.player_light_pair_player_helper": "Vælg Music Assistant-afspilleren til dette lyspar.",
"ui.all": "Alle",
"ui.all_genres": "Alle genrer",
Expand Down
42 changes: 21 additions & 21 deletions dist/localization/da.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,11 @@ const messages = Object.freeze({
"ui.announcement_failed_with_error": "Meddelelse mislykkedes{error}",
"ui.announcement_language": "Sprog for annoncering",
"ui.announcement_presets": "Forudindstillinger for annoncering",
"ui.announcement_sent_to_player": "Meddelelse sendt til {afspiller}.",
"ui.announcement_sent_to_player": "Meddelelse sendt til {player}.",
"ui.announcement_studio": "announcement studio",
"ui.announcement_studio_2": "Announcement Studio",
"ui.announcement_target": "M\u00e5l for annoncering",
"ui.announcement_to_player_preview": "Meddelelse til {afspiller}: {forh\u00e5ndsvisning}",
"ui.announcement_to_player_preview": "Meddelelse til {player}: {preview}",
"ui.announcement_volume_boost": "For\u00f8gelse af lydstyrken ved annoncering",
"ui.announcements": "Meddelelser",
"ui.appearance": "Udseende",
Expand Down Expand Up @@ -176,7 +176,7 @@ const messages = Object.freeze({
"ui.delete_schedule": "Slet tidsplan",
"ui.descending": "Nedadg\u00e5ende",
"ui.dictate": "Diktere",
"ui.disabled": "Handicappet",
"ui.disabled": "Inaktiv",
"ui.disables_blur_animations_dynamic_backgrounds_and_heavy_shadows_recommend": "Deaktiverer sl\u00f8ring, animationer, dynamiske baggrunde og kraftige skygger. Anbefales til Nest Hub og svagere tablets.",
"ui.disconnect": "Afbryd forbindelsen",
"ui.disconnect_all": "Afbryd alle forbindelser",
Expand Down Expand Up @@ -333,7 +333,7 @@ const messages = Object.freeze({
"ui.media_2": "Medier",
"ui.media_actions": "Handlinger i medierne",
"ui.media_layout": "Medielayout",
"ui.media_selected_target": "Udvalgt: {media} ? M\u00e5l: {m\u00e5l}",
"ui.media_selected_target": "Udvalgt: {media} ? M\u00e5l: {target}",
"ui.menu": "Menu",
"ui.message": "Besked",
"ui.microphone": "Mikrofon",
Expand Down Expand Up @@ -371,7 +371,7 @@ const messages = Object.freeze({
"ui.night": "Nat",
"ui.night_end_time": "Sluttidspunkt for natten",
"ui.night_mode": "Nattilstand",
"ui.night_mode_auto_window": "Nattilstand auto {start}-{slut}",
"ui.night_mode_auto_window": "Nattilstand auto {start}-{end}",
"ui.night_mode_days": "Nattilstand dage",
"ui.night_mode_is_always_on": "Nattilstand er altid sl\u00e5et til",
"ui.night_mode_is_off": "Nattilstand er sl\u00e5et fra",
Expand Down Expand Up @@ -491,7 +491,7 @@ const messages = Object.freeze({
"ui.playback_started": "Afspilning startet",
"ui.player": "Afspiller",
"ui.player_2": "Afspiller",
"ui.player_count_many": "{Afspillere",
"ui.player_count_many": "{count} afspillere",
"ui.player_count_one": "1 Afspiller",
"ui.player_groups_could_not_be_disconnected": "Grupper af Afspillere kunne ikke afbrydes",
"ui.player_is_pinned_from_settings": "Afspilleren er fastgjort fra indstillingerne",
Expand Down Expand Up @@ -599,7 +599,7 @@ const messages = Object.freeze({
"ui.scheduled_start_cleared": "Planlagt start ryddet",
"ui.scheduled_start_failed": "Planlagt start mislykkedes",
"ui.scheduled_start_saved": "Planlagt start gemt",
"ui.scheduled_starts_active_count": "{antal} planlagte starter aktiv",
"ui.scheduled_starts_active_count": "{count} planlagte starter aktiv",
"ui.schedules": "Skemaer",
"ui.search": "S\u00f8g",
"ui.search_and_choose_play_next_add_radio_or_like": "S\u00f8g og v\u00e6lg Play, Next, Add, Radio eller Like.",
Expand Down Expand Up @@ -649,16 +649,16 @@ const messages = Object.freeze({
"ui.skipped_to_up_next": "Sprang til n\u00e6ste side",
"ui.sleep_timer": "Sleep-timer",
"ui.sleep_timer_2": "Sleep-timer",
"ui.sleep_timer_active_remaining": "Sleep-timer aktiv: {forbliver}.",
"ui.sleep_timer_added_minutes": "Tilf\u00f8jede {minutter} minutter til timeren",
"ui.sleep_timer_active_remaining": "Sleep-timer aktiv: {remaining}.",
"ui.sleep_timer_added_minutes": "Tilf\u00f8jede {minutes} minutter til timeren",
"ui.sleep_timer_and_morning_playback": "Sleep timer og morgenafspilning",
"ui.sleep_timer_and_scheduled_playback": "Sleep-timer og planlagt afspilning",
"ui.sleep_timer_cleared": "Sleep-timer ryddet",
"ui.sleep_timer_finished": "Sleep-timer f\u00e6rdig",
"ui.sleep_timer_presets": "Forudindstillede sleep-timer",
"ui.sleep_timer_set_for_15_minutes": "Sleep-timer indstillet til 15 minutter",
"ui.sleep_timer_set_minutes": "Sleep-timer indstillet til {minutter} minutter",
"ui.sleep_timer_updated_minutes": "Sleep-timer opdateret til {minutter} minutter",
"ui.sleep_timer_set_minutes": "Sleep-timer indstillet til {minutes} minutter",
"ui.sleep_timer_updated_minutes": "Sleep-timer opdateret til {minutes} minutter",
"ui.smaller_lyrics": "Mindre tekster",
"ui.smart": "Smart",
"ui.smart_mix": "smart blanding",
Expand Down Expand Up @@ -726,7 +726,7 @@ const messages = Object.freeze({
"ui.this_device_player_disconnected": "Afspilleren af denne enhed er frakoblet",
"ui.thu": "Torsdag",
"ui.timer": "Timer",
"ui.timer_active_remaining": "Timer aktiv: {resterende}",
"ui.timer_active_remaining": "Timer aktiv: {remaining}",
"ui.timers": "Timere",
"ui.to": "Til",
"ui.today": "I dag",
Expand Down Expand Up @@ -761,7 +761,7 @@ const messages = Object.freeze({
"ui.move_up": "Bev\u00e6g dig opad",
"ui.up_next": "N\u00e6ste gang",
"ui.up_next_2": "N\u00e6ste",
"ui.up_next_title": "N\u00e6ste gang: {titel}",
"ui.up_next_title": "N\u00e6ste gang: {title}",
"ui.upbeat_and_moving": "Upbeat og bev\u00e6gende",
"ui.use_any_home_assistant_path_example_lovelace_home": "Brug en hvilken som helst sti til Home Assistant. Eksempel: /lovelace/hjem",
"ui.use_current_view_for_home_button": "Brug den aktuelle visning som startknap",
Expand Down Expand Up @@ -792,7 +792,7 @@ const messages = Object.freeze({
"ui.voice_assistant_listening": "Lytter efter en kommando...",
"ui.voice_assistant_mode": "Stemmeassistent-tilstand",
"ui.voice_command_executed": "Stemmekommando udf\u00f8rt",
"ui.voice_command_completed_action": "F\u00e6rdig: {Handlinger}",
"ui.voice_command_completed_action": "F\u00e6rdig: {action}",
"ui.voice_command_failed": "Stemmekommando mislykkedes",
"ui.voice_command_no_player": "V\u00e6lg en afspiller, eller sig afspillerens navn.",
"ui.voice_command_not_understood": "Jeg kunne ikke forst\u00e5 den kommando.",
Expand All @@ -803,16 +803,16 @@ const messages = Object.freeze({
"ui.voice_group_connect_needs_players": "Sig mindst to spilleres navne, eller v\u00e6lg en spiller og sig den anden.",
"ui.voice_group_connected_players": "Forbundet {primary} med {members}.",
"ui.voice_group_disconnect_needs_player": "Sig, hvilken gruppe afspillere der skal afbrydes.",
"ui.voice_group_disconnected_player": "Afbr\u00f8d gruppen for {afspiller}.",
"ui.voice_group_disconnected_player": "Afbr\u00f8d gruppen for {player}.",
"ui.voice_input_failed": "Stemmeinput mislykkedes",
"ui.voice_input_is_not_supported_on_this_device": "Stemmeinput er ikke underst\u00f8ttet p\u00e5 denne enhed",
"ui.voice_language_is_not_supported": "Denne browser underst\u00f8tter ikke det valgte sprog til talegenkendelse.",
"ui.voice_match_not_confident": "Jeg fandt {title}, men den matcher ikke \"{query}\" t\u00e6t nok. Pr\u00f8v at sige sangen og kunstneren igen.",
"ui.voice_music_searching": "S\u00f8g efter musik: {query}",
"ui.voice_playing_result": "Spiller {titel}",
"ui.voice_playing_result": "Spiller {title}",
"ui.voice_queue_transfer_needs_players": "Sig kilde- og m\u00e5lafspiller, for eksempel: overf\u00f8r k\u00f8 fra stue til k\u00f8kken.",
"ui.voice_queue_transferred_between": "K\u00f8 overf\u00f8rt fra {kilde} til {m\u00e5l}.",
"ui.voice_starting_playback": "Starter {titel}...",
"ui.voice_queue_transferred_between": "K\u00f8 overf\u00f8rt fra {source} til {target}.",
"ui.voice_starting_playback": "Starter {title}...",
"ui.voice_processing_status": "Behandler kommando...",
"ui.voice_ready_status": "Klar",
"ui.voice_recognition_network_failed": "Talegenkendelsestjenesten er ikke tilg\u00e6ngelig. Mikrofontilladelsen er muligvis OK; tjek browseren, VPN, DNS, firewall eller netv\u00e6rk.",
Expand Down Expand Up @@ -862,12 +862,12 @@ const messages = Object.freeze({
"ui.discovery": "Opdagelse",
"ui.discovery_failed": "Opdagelsestilstand mislykkedes",
"ui.discovery_mode": "Opdagelsestilstand",
"ui.discovery_started": "Opdagelsen er begyndt: {stemning}",
"ui.discovery_started": "Opdagelsen er begyndt: {mood}",
"ui.maximum_brightness_for_music_lighting": "Maksimal lysstyrke til musikbelysning.",
"ui.minimum_seconds_between_light_updates": "Minimum sekunder mellem lysopdateringer.",
"ui.player_light_pair_lights": "Farve lys {antal}",
"ui.player_light_pair_lights": "Farve lys {number}",
"ui.player_light_pair_lights_helper": "V\u00e6lg farveegnede lys til denne Music Assistant-afspiller. Ryd dette felt eller Afspilleren for at fjerne parret.",
"ui.player_light_pair_player": "Music Assistant afspiller {nummer}",
"ui.player_light_pair_player": "Music Assistant afspiller {number}",
"ui.player_light_pair_player_helper": "V\u00e6lg Music Assistant-afspilleren til dette lyspar.",
"ui.all": "Alle",
"ui.all_genres": "Alle genrer",
Expand Down
2 changes: 1 addition & 1 deletion dist/localization/index.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import en from "./en.js?v=5.8.1-9e122c742b";
import da from "./da.js?v=5.8.1-ef0757fed6";
import da from "./da.js?v=5.8.1-0a8ed58837";
import es from "./es.js?v=5.8.1-f080039ddc";
import fr from "./fr.js?v=5.8.1-012da49900";
import he from "./he.js?v=5.8.1-da05e2083c";
Expand Down
Loading