Skip to content

Complete all languages using AI to have a baseline#1074

Merged
frenck merged 1 commit intomainfrom
frenck-2025-0401
Sep 25, 2025
Merged

Complete all languages using AI to have a baseline#1074
frenck merged 1 commit intomainfrom
frenck-2025-0401

Conversation

@frenck
Copy link
Copy Markdown
Owner

@frenck frenck commented Sep 25, 2025

Description

Set a baseline for all translation in all languages Home Assistant supports.
Existing translations have been untouched, missing have been added.

Motivation and Context

How has this been tested?

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Other

Checklist

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Sep 25, 2025

📝 Walkthrough

Walkthrough

Adds and restructures many Spook translation JSONs across locales, introducing top-level config, entity (button/event/sensor/switch), and issues sections with user_issue and restart_required fix flows, plus repairs_event attributes. Also removes nb_NO.json.

Changes

Cohort / File(s) Summary
Expanded/Restructured locales
custom_components/spook/translations/af.json, ar.json, bg.json, bn.json, bs.json, ca.json, cs.json, da.json, de.json, el.json, es.json, et.json, eu.json, fa.json, fi.json, fr.json, gl.json, he.json, hr.json, hu.json, id.json, it.json, ja.json, ka.json, ko.json, lb.json, lt.json, lv.json, nl.json
Reorganize and expand translation schema: add config.abort/step, entity.button/event/sensor/switch, issues.* (unknown_*), user_issue.fix_flow, restart_required.fix_flow, and event.repairs_event state attributes.
New locale files
custom_components/spook/translations/en-GB.json, es-419.json, be.json, cy.json, eo.json, eu.json, fy.json, ga.json, gsw.json, hi.json, hy.json, is.json, ka.json, lb.json, mk.json, ml.json, nb.json, nn.json
Add complete locale translations including config, entity (button/event/sensor/switch), issues templates, user_issue and restart_required flows, and repairs_event attributes.
File removal
custom_components/spook/translations/nb_NO.json
Remove Norwegian (nb_NO) translation file entirely.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor User
  participant HA as Home Assistant UI
  participant Spook as Spook Integration

  rect rgba(225,245,254,0.6)
  Note over HA,Spook: Setup/config flow (new translations)
  User->>HA: Start Spook setup
  HA->>Spook: Request config step text
  Spook-->>HA: config.step.user / choice_restart
  HA->>User: Show restart_now / restart_later
  alt restart_now
    User->>HA: Choose restart_now
    HA->>Spook: Trigger restart_required.fix_flow.confirm_restart
    Spook-->>HA: Restart confirmation text
    HA->>HA: Restart Home Assistant
  else restart_later
    User-->>HA: Dismiss
  end
  end

  rect rgba(232,245,233,0.6)
  Note over HA,Spook: Repairs issues (new issues/*, user_issue)
  Spook->>HA: Emit repairs_event (create/update/remove)
  HA->>User: Show issue description/title (issues.*)
  User->>HA: Open fix flow
  HA->>Spook: Request user_issue.fix_flow.step.confirm
  Spook-->>HA: Return confirm text
  end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related PRs

Suggested labels

maintenance

Poem

I hop through strings, from af to ja,
Stitching ghosts in every lingua—ha! 👻
Buttons, sensors, switches align,
Issues resolved in tidy design.
Restart now? I’ll thump—let’s go!
Carrots cached, translations glow. 🥕✨

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title clearly summarizes the primary change of the pull request, indicating that translations for all supported languages have been completed using AI to establish a baseline, which directly reflects the addition of missing translation files without extraneous detail.
Description Check ✅ Passed The description succinctly explains that the change sets a baseline by adding missing translations for all supported languages while leaving existing translations untouched, which directly corresponds to the modifications made in the pull request.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.
✨ Finishing touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch frenck-2025-0401

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@sonarqubecloud
Copy link
Copy Markdown

@frenck frenck added the enhancement Enhancement of the code, not introducing new features. label Sep 25, 2025
@felixschndr
Copy link
Copy Markdown

Thats a nice addition. I am wondering whether it would be senseful to have some kind of GitHub workflow that checks when a new string is added that is is present in other languages and if not might even use AI automatically add it?

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 50

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
custom_components/spook/translations/he.json (1)

212-220: Incorrect Alexa switch label.

"Microsoft State Report" is wrong. Use the standard label to avoid user confusion.

Apply this diff:

       "cloud_alexa_report_state": {
-        "name": "Microsoft State Report"
+        "name": "Alexa state reporting"
       },
custom_components/spook/translations/de.json (1)

236-307: German issue descriptions contain obvious translation errors

In the German issue templates there are multiple mistakes: e.g., “Spock” instead of “Spook”, “The Automatisierung…” mixing English and German, and punctuation/spacing issues. These are user-facing texts surfaced in repairs and will look broken in production. Please clean up these translations so they read naturally in German.

custom_components/spook/translations/gl.json (1)

53-329: Galician additions include untranslated/incorrect text

A substantial portion of the Galician content (sensor names like “Calidad del aire”, issue descriptions copied verbatim from English, etc.) is either Spanish or English. Users selecting Galician will see a patchwork of languages. Please localize these strings correctly into Galician throughout this block.

custom_components/spook/translations/ar.json (1)

229-329: Arabic issue templates are still English

The Arabic issues section retains English text for many entries (e.g., device/entity/floor/label/service descriptions, restart flow). This results in mixed-language UI and undermines the intended localization. Please provide proper Arabic translations for these user-facing messages.

🧹 Nitpick comments (30)
custom_components/spook/translations/ko.json (1)

84-86: Optional: streamline “custom component” phrasing.

“사용자 통합구성요소” is a bit clunky. Consider “사용자 통합” for brevity, matching HA Korean conventions.

-        "name": "사용자 통합구성요소"
+        "name": "사용자 통합"
custom_components/spook/translations/nl.json (1)

186-187: LGTM overall; minor nits (pluralization).

  • Optional: “homeassistant_update.name” → “Updates”.
  • Optional: “homeassistant_sun.name” → “Zon” (or keep plural “Zonnen” if it’s intended as a category).
  • Repairs counters look good.

No blockers.

Also applies to: 171-174, 201-209

custom_components/spook/translations/es.json (1)

171-174: Improve “Sun” label.

“Soleados” is an adjective. Prefer “Sol”.

-        "name": "Soleados"
+        "name": "Sol"
custom_components/spook/translations/mt.json (1)

35-51: Baseline is acceptable; many entries remain in English.

No functional issues detected. Consider localizing:

  • repairs_event state strings (create/remove/update),
  • issue descriptions (currently mostly English).

This can be iterative; not a blocker.

Also applies to: 224-307

custom_components/spook/translations/fr.json (3)

213-216: Polish button names (use “d’état”).

-        "name": "Rapport status Alexa"
+        "name": "Rapport d’état Alexa"
-        "name": "Rapport de status Google Assistant"
+        "name": "Rapport d’état de Google Assistant"

295-295: Use French term for “label(s)”.

-      "title": "Label inconnu utilisé dans: {script}"
+      "title": "Étiquettes inconnues utilisées dans : {script}"

168-170: Optional: localize STT/TTS.

-        "name": "Speech-to-text"
+        "name": "Reconnaissance vocale"
-        "name": "Text-to-speech"
+        "name": "Synthèse vocale"

Also applies to: 183-185

custom_components/spook/translations/da.json (2)

204-206: Capitalization consistency.

-        "name": "ignoreret"
+        "name": "Ignoreret"

324-326: Fix restart CTA wording (“Opret” → “Send”).

-            "description": "For at Spook 👻kan afslutte opsætningen skal Home Assistant genstartes.\n\nVælg Opret for at genstarte Home Assistant nu."
+            "description": "For at Spook 👻 kan afslutte opsætningen, skal Home Assistant genstartes.\n\nVælg Send for at genstarte Home Assistant nu."
custom_components/spook/translations/lb.json (1)

39-50: Untranslated event attribute strings

"Issue created/removed/updated", "Issue issuer", and "Issue ID" remain in English. Consider localizing, or intentionally keep English across locales consistently.

custom_components/spook/translations/cy.json (2)

39-50: Untranslated event attribute strings

"Issue created/removed/updated", "Issue issuer", and "Issue ID" are still English. Consider localizing or standardizing to English across all locales.


54-200: Mixed localization quality in sensor names

Several sensor names remain English (e.g., Air quality, Alarm control panels). Acceptable for baseline; suggest scheduling native review to improve coverage.

custom_components/spook/translations/bn.json (3)

27-33: Potentially misleading translation for “unignore”

"সব পুনরায় বিবেচনা করুন" reads like “reconsider all”. Suggest something closer to “উপেক্ষা বন্ধ করুন” / “আর উপেক্ষা নয়”.

-        "name": "সব পুনরায় বিবেচনা করুন"
+        "name": "আর উপেক্ষা নয়"

39-50: Untranslated event attribute strings

Consider localizing "Issue created/removed/updated", "Issue issuer", "Issue ID".


54-200: English leftovers in many entity names

Baseline is fine; plan follow-up native review for Bengali to improve UX.

custom_components/spook/translations/mk.json (2)

27-32: Minor Macedonian wording

"Игнорирај се" should be "Игнорирај сè" (“ignore all”).

-        "name": "Игнорирај се"
+        "name": "Игнорирај сè"

39-50: Untranslated event attribute strings

Same note as other locales.

custom_components/spook/translations/ml.json (2)

39-50: Untranslated event attribute strings

Consider localizing event_type states and attribute names.


54-210: English residues across many entity names

Acceptable as baseline; propose a tracked task to improve Malayalam coverage with native speakers.

custom_components/spook/translations/be.json (2)

1-18: Abort/readme strings left in English

Mixed locale within Belarusian file (e.g., abort/step still English). For consistency, either localize or standardize to English across all locales.


39-50: Untranslated event attribute strings

Same as other locales.

custom_components/spook/translations/eo.json (2)

27-33: “repairs_unignore_all” phrasing

"Ne ignori ion" means “don’t ignore anything (singular/any)”. Prefer “Ne ignori ion ajn” or “Ĉesi ignori ĉion”.

-        "name": "Ne ignori ion"
+        "name": "Ĉesi ignori ĉion"

39-50: Untranslated event attribute strings

Localize or standardize.

custom_components/spook/translations/hy.json (2)

39-50: Untranslated event attribute strings

Localize "Issue created/removed/updated", "Issue issuer", "Issue ID".


54-210: English strings across many entity names

Baseline acceptable; recommend native pass later.

custom_components/spook/translations/nn.json (1)

171-173: Pluralization/consistency nits (non-blocking).

  • Line 172: "Suns" looks incorrect for the Sun domain (likely singular or localized form expected).
  • Lines 201-209: Repairs counters mix pluralization ("Aktiv" vs expected plural). Consider aligning grammar across labels.

Please confirm if these should follow en-GB singular/plural conventions or be localized fully to Nynorsk for consistency.

Also applies to: 201-209

custom_components/spook/translations/is.json (1)

171-176: Minor localization inconsistencies (non-blocking).

  • Line 172: "Suns" likely incorrect pluralization for the Sun domain.
  • Line 163: "Skynjari" (singular) while other domains appear pluralized. Consider consistency.

Confirm intended singular/plural policy for domain names in Icelandic; align across labels accordingly.

Also applies to: 162-164

custom_components/spook/translations/af.json (1)

21-26: Reload vs Restart labels (optional).

Both reload and restart buttons are labeled "Begin oor". Consider differentiating (e.g., "Herlaai" vs "Begin oor") to reduce confusion.

custom_components/spook/translations/fy.json (1)

171-176: Minor localization gaps (non-blocking).

  • "Suns" likely incorrect.
  • Event state labels left in English. Acceptable as baseline, but consider localizing.

Confirm whether to keep English fallbacks or translate these before release.

Also applies to: 39-43

custom_components/spook/translations/et.json (1)

4-5: Baseline English remnants (non-blocking).

  • Abort string is fully English; acceptable for baseline but should be localized.
  • "Suns" likely incorrect pluralization.

Also applies to: 171-176

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between db4a3dd and 82093de.

📒 Files selected for processing (46)
  • custom_components/spook/translations/af.json (1 hunks)
  • custom_components/spook/translations/ar.json (2 hunks)
  • custom_components/spook/translations/be.json (1 hunks)
  • custom_components/spook/translations/bg.json (1 hunks)
  • custom_components/spook/translations/bn.json (1 hunks)
  • custom_components/spook/translations/bs.json (1 hunks)
  • custom_components/spook/translations/ca.json (2 hunks)
  • custom_components/spook/translations/cs.json (1 hunks)
  • custom_components/spook/translations/cy.json (1 hunks)
  • custom_components/spook/translations/da.json (1 hunks)
  • custom_components/spook/translations/de.json (8 hunks)
  • custom_components/spook/translations/el.json (1 hunks)
  • custom_components/spook/translations/en-GB.json (1 hunks)
  • custom_components/spook/translations/eo.json (1 hunks)
  • custom_components/spook/translations/es-419.json (1 hunks)
  • custom_components/spook/translations/es.json (7 hunks)
  • custom_components/spook/translations/et.json (1 hunks)
  • custom_components/spook/translations/eu.json (1 hunks)
  • custom_components/spook/translations/fa.json (1 hunks)
  • custom_components/spook/translations/fi.json (1 hunks)
  • custom_components/spook/translations/fr.json (1 hunks)
  • custom_components/spook/translations/fy.json (1 hunks)
  • custom_components/spook/translations/ga.json (1 hunks)
  • custom_components/spook/translations/gl.json (2 hunks)
  • custom_components/spook/translations/gsw.json (1 hunks)
  • custom_components/spook/translations/he.json (2 hunks)
  • custom_components/spook/translations/hi.json (1 hunks)
  • custom_components/spook/translations/hr.json (8 hunks)
  • custom_components/spook/translations/hu.json (1 hunks)
  • custom_components/spook/translations/hy.json (1 hunks)
  • custom_components/spook/translations/id.json (1 hunks)
  • custom_components/spook/translations/is.json (1 hunks)
  • custom_components/spook/translations/it.json (1 hunks)
  • custom_components/spook/translations/ja.json (2 hunks)
  • custom_components/spook/translations/ka.json (1 hunks)
  • custom_components/spook/translations/ko.json (1 hunks)
  • custom_components/spook/translations/lb.json (2 hunks)
  • custom_components/spook/translations/lt.json (2 hunks)
  • custom_components/spook/translations/lv.json (1 hunks)
  • custom_components/spook/translations/mk.json (1 hunks)
  • custom_components/spook/translations/ml.json (1 hunks)
  • custom_components/spook/translations/mt.json (1 hunks)
  • custom_components/spook/translations/nb.json (1 hunks)
  • custom_components/spook/translations/nb_NO.json (0 hunks)
  • custom_components/spook/translations/nl.json (1 hunks)
  • custom_components/spook/translations/nn.json (1 hunks)
💤 Files with no reviewable changes (1)
  • custom_components/spook/translations/nb_NO.json
🧰 Additional context used
🧬 Code graph analysis (6)
custom_components/spook/translations/eo.json (9)
custom_components/spook/ectoplasms/script/repairs/unknown_label_references.py (1)
  • SpookRepair (14-61)
custom_components/spook/ectoplasms/automation/repairs/unknown_entity_references.py (1)
  • SpookRepair (259-334)
custom_components/spook/ectoplasms/lovelace/repairs/unknown_entity_references.py (1)
  • SpookRepair (27-325)
custom_components/spook/ectoplasms/automation/repairs/unknown_floor_references.py (1)
  • SpookRepair (14-64)
custom_components/spook/ectoplasms/automation/repairs/unknown_device_references.py (1)
  • SpookRepair (14-68)
custom_components/spook/ectoplasms/script/repairs/unknown_entity_references.py (1)
  • SpookRepair (76-163)
custom_components/spook/ectoplasms/homeassistant/services/add_alias_to_floor.py (1)
  • SpookService (22-43)
custom_components/spook/ectoplasms/automation/repairs/unknown_area_references.py (1)
  • SpookRepair (14-65)
custom_components/spook/ectoplasms/homeassistant/services/add_label_to_entity.py (1)
  • SpookService (23-46)
custom_components/spook/translations/nb.json (2)
custom_components/spook/ectoplasms/automation/repairs/unknown_entity_references.py (1)
  • SpookRepair (259-334)
custom_components/spook/ectoplasms/script/repairs/unknown_label_references.py (1)
  • SpookRepair (14-61)
custom_components/spook/translations/bs.json (9)
custom_components/spook/ectoplasms/script/repairs/unknown_label_references.py (1)
  • SpookRepair (14-61)
custom_components/spook/ectoplasms/automation/repairs/unknown_entity_references.py (1)
  • SpookRepair (259-334)
custom_components/spook/ectoplasms/homeassistant/services/add_label_to_entity.py (1)
  • SpookService (23-46)
custom_components/spook/ectoplasms/lovelace/repairs/unknown_entity_references.py (1)
  • SpookRepair (27-325)
custom_components/spook/ectoplasms/automation/repairs/unknown_device_references.py (1)
  • SpookRepair (14-68)
custom_components/spook/ectoplasms/homeassistant/services/add_alias_to_area.py (1)
  • SpookService (19-40)
custom_components/spook/ectoplasms/script/repairs/unknown_entity_references.py (1)
  • SpookRepair (76-163)
custom_components/spook/ectoplasms/homeassistant/services/add_alias_to_floor.py (1)
  • SpookService (22-43)
custom_components/spook/ectoplasms/repairs/sensor.py (1)
  • HomeAssistantSpookSensorEntity (90-115)
custom_components/spook/translations/en-GB.json (7)
custom_components/spook/ectoplasms/automation/repairs/unknown_entity_references.py (1)
  • SpookRepair (259-334)
custom_components/spook/ectoplasms/script/repairs/unknown_entity_references.py (1)
  • SpookRepair (76-163)
custom_components/spook/ectoplasms/automation/repairs/unknown_device_references.py (1)
  • SpookRepair (14-68)
custom_components/spook/ectoplasms/automation/repairs/unknown_area_references.py (1)
  • SpookRepair (14-65)
custom_components/spook/ectoplasms/lovelace/repairs/unknown_entity_references.py (1)
  • SpookRepair (27-325)
custom_components/spook/ectoplasms/automation/repairs/unknown_floor_references.py (1)
  • SpookRepair (14-64)
custom_components/spook/ectoplasms/integration/repairs/unknown_source.py (1)
  • SpookRepair (15-62)
custom_components/spook/translations/lt.json (7)
custom_components/spook/ectoplasms/automation/repairs/unknown_entity_references.py (2)
  • async_inspect (273-334)
  • SpookRepair (259-334)
custom_components/spook/ectoplasms/script/repairs/unknown_label_references.py (1)
  • SpookRepair (14-61)
custom_components/spook/ectoplasms/automation/repairs/unknown_device_references.py (2)
  • SpookRepair (14-68)
  • async_inspect (28-68)
custom_components/spook/ectoplasms/automation/repairs/unknown_floor_references.py (2)
  • async_inspect (26-64)
  • SpookRepair (14-64)
custom_components/spook/ectoplasms/script/repairs/unknown_entity_references.py (1)
  • SpookRepair (76-163)
custom_components/spook/ectoplasms/automation/repairs/unknown_area_references.py (1)
  • SpookRepair (14-65)
custom_components/spook/ectoplasms/lovelace/repairs/unknown_entity_references.py (1)
  • SpookRepair (27-325)
custom_components/spook/translations/is.json (7)
custom_components/spook/ectoplasms/script/repairs/unknown_label_references.py (1)
  • SpookRepair (14-61)
custom_components/spook/ectoplasms/automation/repairs/unknown_entity_references.py (1)
  • SpookRepair (259-334)
custom_components/spook/ectoplasms/script/repairs/unknown_entity_references.py (1)
  • SpookRepair (76-163)
custom_components/spook/ectoplasms/automation/repairs/unknown_device_references.py (1)
  • SpookRepair (14-68)
custom_components/spook/ectoplasms/lovelace/repairs/unknown_entity_references.py (1)
  • SpookRepair (27-325)
custom_components/spook/ectoplasms/automation/repairs/unknown_area_references.py (1)
  • SpookRepair (14-65)
custom_components/spook/ectoplasms/automation/repairs/unknown_floor_references.py (1)
  • SpookRepair (14-64)
🔇 Additional comments (12)
custom_components/spook/translations/fr.json (1)

274-275: Scene title spacing/accents.

-      "title": "Entités inconnues utilisées dans :{scene}"
+      "title": "Entités inconnues utilisées dans : {scene}"

[suggest_minor_issue]

custom_components/spook/translations/lb.json (2)

1-18: Schema and structure look good

Top-level keys (config/entity/issues), restart flow, and user_issue follow the expected schema.


223-329: Translation QA passed. All JSON files parse correctly and every locale includes the required issues entries.

custom_components/spook/translations/cy.json (1)

1-18: Good addition; aligns with schema

Welsh file mirrors the expected structure and keys.

custom_components/spook/translations/bn.json (1)

1-18: Schema OK

File follows the common config/entity/issues schema.

custom_components/spook/translations/mk.json (1)

1-18: Overall structure LGTM

Matches the shared translation schema and keys.

custom_components/spook/translations/ml.json (1)

1-18: Schema and keys consistent

Good baseline coverage; no structural issues spotted.

custom_components/spook/translations/eo.json (1)

1-18: Structure OK; baseline accepted

Follows the expected schema and keys.

custom_components/spook/translations/hy.json (1)

1-18: Schema and keys are correct

Consistent with other locales.

custom_components/spook/translations/bs.json (1)

1-332: Baseline looks OK; placeholders preserved.

No blocking issues spotted. Placeholders and structure match expectations. Some English remnants remain, which is acceptable for a baseline.

I’ll add a repo-wide placeholder consistency check below (see en-GB comment) to ensure parity with the reference.

custom_components/spook/translations/he.json (1)

252-255: Likely malformed JSON and missing placeholders (integration_unknown_source).

Content is corrupted (unescaped quotes, missing placeholders {helper}, {entity_id}, {source}). This can break loading.

Replace with the reference text:

-    "integration_unknown_source": {
-      "description": "Spook מצא רוח רפאים בסכום העזרה האינטגראלית שלך 👻\n\nבזמן צף סביב, ספוק חצה את הנתיב עם העוזר הבא:\n\n(הופנה מהדף)\n\nעוזר זה יש גורם מקור לא ידוע עוזר בית:\n\n[מקור] \"\n\n\n\nכדי לתקן את השגיאה הזו, לערוך את העוזר ולהתאים את ישות המקור (או להסיר את העוזר) ולחדש את עוזר הבית.\n\nלא את הרצח שלך.",
-      "title": "מקור לא ידוע: עזרה"
-    },
+    "integration_unknown_source": {
+      "description": "Spook has found a ghost in your Riemann sum integral helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
+      "title": "Unknown source: {helper}"
+    },

Likely an incorrect or invalid review comment.

custom_components/spook/translations/en-GB.json (1)

1-332: Verify placeholder parity across locales
Run a script to compare each translation’s issues.* placeholders against custom_components/spook/translations/en-GB.json (and search for any {titel} typos) to ensure no missing or mismatched placeholders remain.

Comment on lines +10 to +15
"choice_restart": {
"description": "In order for Spook to finish setting up, Home Assistant needs to be restarted.\n\nDo you want to restart Home Assistant now?",
"menu_options": {
"restart_now": "Restart now",
"restart_later": "Restart later"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Translate the restart prompt into Bulgarian.

The restart description and options are English. For a Bulgarian file we need localized strings here.

🤖 Prompt for AI Agents
In custom_components/spook/translations/bg.json around lines 10 to 15, the
restart prompt and menu options are still in English; replace the English
strings with Bulgarian translations so the locale file is consistent — change
"description" to "За да завърши инсталирането на Spook, Home Assistant трябва да
бъде рестартиран.\n\nИскате ли да рестартирате Home Assistant сега?" and
"restart_now" to "Рестартирай сега" and "restart_later" to "Рестартирай
по-късно".

Comment on lines +39 to +41
"create": "Issue created",
"remove": "Issue removed",
"update": "Issue updated"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Localize the event state labels.

"Issue created/removed/updated" hasn’t been translated. Please replace these with Bulgarian equivalents.

🤖 Prompt for AI Agents
In custom_components/spook/translations/bg.json around lines 39 to 41, the
English event state labels "Issue created", "Issue removed", and "Issue updated"
are not translated; replace their values with Bulgarian equivalents — e.g.
"Проблем създаден", "Проблем премахнат", and "Проблем актуализиран" — by
updating the JSON string values accordingly so the UI shows localized labels.

Comment on lines +224 to +307
"automation_unknown_area_references": {
"description": "Spook намери призрак в автоматизациите ви 👻\n\nДокато се носеше наоколо, Spook се натъкна на следната автоматизация:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nТази автоматизация препраща към следните области, които са неизвестни на Home Assistant:\n\n{areas}\n\n\n\nЗа да поправите тази грешка, [редактирайте автоматизацията]({edit}) и премахнете използването на тези несъществуващи области.\n\nSpook 👻 Вашият приятел.",
"title": "Непознати области използвани в: {automation}"
},
"automation_unknown_device_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {automation}"
},
"automation_unknown_entity_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {automation}"
},
"automation_unknown_floor_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {automation}"
},
"automation_unknown_label_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {automation}"
},
"automation_unknown_service_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following actions, which are unknown to Home Assistant:\n\n{services}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing actions.\n\nSpook 👻 Your homie.",
"title": "Unknown actions used in: {automation}"
},
"group_unknown_members": {
"description": "Spook has found a ghost in your groups 👻\n\nWhile floating around, Spook crossed path with the following group:\n\n{group} (`{entity_id}`)\n\nThis group has members, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the group, remove the use of these non-existing entities and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown group members in: {group}"
},
"integration_unknown_source": {
"description": "Spook has found a ghost in your Riemann sum integral helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"lovelace_unknown_entity_references": {
"description": "Spook has found a ghost in your dashboards 👻\n\nWhile floating around, Spook crossed path with the following dashboard:\n\n[{dashboard}]({edit})\n\nThis dashboard references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the dashboard]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {dashboard}"
},
"proximity_unknown_ignored_zones": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is ignoring zones that are unknown to Home Assistant:\n\n{zones}\n\n\n\nTo fix this error, edit the configuration and remove this/these zones.\n\nSpook 👻 Your homie.",
"title": "Unknown ignored zones: {name}"
},
"proximity_unknown_tracked_entities": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is tracking persons or devices trackers that are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the configuration and remove this/these entities.\n\nSpook 👻 Your homie.",
"title": "Unknown tracked entities: {name}"
},
"proximity_unknown_zone": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is based on a zone that is unknown to Home Assistant:\n\n`{zone}`\n\n\n\nTo fix this error, as you can't change the zone of a proximity configuration, the only option is to remove this specific proximity integration instance.\n\nSpook 👻 Your homie.",
"title": "Unknown zone: {zone}"
},
"scene_unknown_entity_references": {
"description": "Spook has found a ghost in your scenes 👻\n\nWhile floating around, Spook crossed path with the following scene:\n\n[{scene}]({edit})\n\nThis scene references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the scene]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {scene}"
},
"script_unknown_area_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {script}"
},
"script_unknown_device_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {script}"
},
"script_unknown_entity_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {script}"
},
"script_unknown_floor_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {script}"
},
"script_unknown_label_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {script}"
},
"switch_as_x_unknown_source": {
"description": "Spook has found a ghost in your Switch as X helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source switch entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"utility_meter_unknown_source": {
"description": "Spook has found a ghost in your utility meter helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"trend_unknown_source": {
"description": "Spook has found a ghost in your trend helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Issue descriptions/titles remain English—must be translated.

Most entries in the issues section are still the original English text. Bulgarian users would see non-localized repairs copy. Please provide Bulgarian translations before merging.

Comment on lines +225 to +233
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia les àrees següents, els quals són desconeguts a Assistent de Casa:\n\n{areas}\n\n\n\nper fixar aquest error, [editar l'automatització]({edició}) i treure l'ús d'aquests àreesnoexistents.\n\nSpook 👻 No el vostre homie.",
"title": "Les àrees desconegudes van utilitzar dins: {automatització}"
},
"automation_unknown_device_references": {
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia els dispositius següents, els quals són desconeguts a Assistent de Casa:\n\n{devices}\n\n\n\nper fixar aquest error, [editar l'automatització]({edit}) i treure l'ús d'aquests dispositiusnoexistents.\n\nSpook 👻 No el vostre homie.",
"title": "Els dispositius desconeguts van utilitzar dins: {automatització}"
},
"automation_unknown_entity_references": {
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia les entitats següents, els quals són desconeguts a Assistent de Casa:\n\n{entities}\n\n\n\nper fixar aquest error, [editar l'automatització]({edit}) i treure l'ús d'aquests entitatsnoexistents.\n\nSpook 👻 No el vostre homie.",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Restore the {edit} placeholder or the repair link breaks

[{automation}]({edició}) replaces the expected {edit} placeholder with {edició}. Home Assistant only injects {edit}, so the rendered link will literally contain {edició} and won't work. Please revert to {edit} everywhere this happened before we ship.

-Per fixar aquest error, [editar l'automatització]({edició}) i treure l'ús d'aquests àreesnoexistents.
+Per fixar aquest error, [editar l'automatització]({edit}) i treure l'ús d'aquests àrees no existents.
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia les àrees següents, els quals són desconeguts a Assistent de Casa:\n\n{areas}\n\n\n\nper fixar aquest error, [editar l'automatització]({edició}) i treure l'ús d'aquests àreesnoexistents.\n\nSpook 👻 No el vostre homie.",
"title": "Les àrees desconegudes van utilitzar dins: {automatització}"
},
"automation_unknown_device_references": {
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia els dispositius següents, els quals són desconeguts a Assistent de Casa:\n\n{devices}\n\n\n\nper fixar aquest error, [editar l'automatització]({edit}) i treure l'ús d'aquests dispositiusnoexistents.\n\nSpook 👻 No el vostre homie.",
"title": "Els dispositius desconeguts van utilitzar dins: {automatització}"
},
"automation_unknown_entity_references": {
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia les entitats següents, els quals són desconeguts a Assistent de Casa:\n\n{entities}\n\n\n\nper fixar aquest error, [editar l'automatització]({edit}) i treure l'ús d'aquests entitatsnoexistents.\n\nSpook 👻 No el vostre homie.",
"description": "Spook ha trobat un fantasma en les vostres automatitzacions 👻\n\nMentre flotant al voltant, Spook va creuar camí amb l'automatització següent:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nAquesta automatització referencia les àrees següents, els quals són desconeguts a Assistent de Casa:\n\n{areas}\n\n\n\nPer fixar aquest error, [editar l'automatització]({edit}) i treure l'ús d'aquests àrees no existents.\n\nSpook 👻 No el vostre homie.",
"title": "Les àrees desconegudes van utilitzar dins: {automatització}"
🤖 Prompt for AI Agents
In custom_components/spook/translations/ca.json around lines 225-233, the link
placeholder was incorrectly localized as "{edició}" which breaks Home
Assistant's injected "{edit}" placeholder; revert "{edició}" back to "{edit}" in
the first description (and scan the file to ensure all localized instances use
the exact "{edit}" placeholder) so the rendered repair link works correctly.

Comment on lines +244 to +247
"automation_unknown_service_references": {
"description": "Spook našel ducha ve tvých automatizacích 👻\n\nZatímco poletoval kolem, Spook narazil na následující automatizaci:\n\n[{automatizace}]({upravit}) (`{entity_id}`)\n\nTato automatizace odkazuje na následující služby, které Home Assistant nezná:\n\n\n{služby}\n\n\nAbys opravil tuto chybu, [uprav automatizaci]({upravit}) a zamez použití těchto neexistujících služeb.\n\nSpook 👻 Your homie.",
"title": "Neznámá činnost použitá v: {automatizaci}"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Restore original placeholder keys in restart flow

You localized the placeholder identifiers ({automation}, {edit}, {services}) to {automatizace}, {upravit}, {služby}, {automatizaci}. These keys must remain exactly as provided; otherwise Home Assistant will raise formatting errors when it can’t resolve the placeholders supplied by the code.

Please revert the placeholder names while keeping the surrounding Czech copy:

-      "description": "Spook našel ducha ve tvých automatizacích 👻\n\nZatímco poletoval kolem, Spook narazil na následující automatizaci:\n\n[{automatizace}]({upravit}) (`{entity_id}`)\n\nTato automatizace odkazuje na následující služby, které Home Assistant nezná:\n\n\n{služby}\n\n\nAbys opravil tuto chybu, [uprav automatizaci]({upravit})  a zamez použití těchto neexistujících služeb.\n\nSpook  👻 Your homie.",
-      "title": "Neznámá činnost použitá v: {automatizaci}"
+      "description": "Spook našel ducha ve tvých automatizacích 👻\n\nZatímco poletoval kolem, Spook narazil na následující automatizaci:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nTato automatizace odkazuje na následující služby, které Home Assistant nezná:\n\n\n{services}\n\n\nAbys opravil tuto chybu, [uprav automatizaci]({edit})  a zamez použití těchto neexistujících služeb.\n\nSpook  👻 Your homie.",
+      "title": "Neznámá činnost použitá v: {automation}"
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"automation_unknown_service_references": {
"description": "Spook našel ducha ve tvých automatizacích 👻\n\nZatímco poletoval kolem, Spook narazil na následující automatizaci:\n\n[{automatizace}]({upravit}) (`{entity_id}`)\n\nTato automatizace odkazuje na následující služby, které Home Assistant nezná:\n\n\n{služby}\n\n\nAbys opravil tuto chybu, [uprav automatizaci]({upravit}) a zamez použití těchto neexistujících služeb.\n\nSpook 👻 Your homie.",
"title": "Neznámá činnost použitá v: {automatizaci}"
},
"automation_unknown_service_references": {
"description": "Spook našel ducha ve tvých automatizacích 👻\n\nZatímco poletoval kolem, Spook narazil na následující automatizaci:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nTato automatizace odkazuje na následující služby, které Home Assistant nezná:\n\n\n{services}\n\n\nAbys opravil tuto chybu, [uprav automatizaci]({edit}) a zamez použití těchto neexistujících služeb.\n\nSpook 👻 Your homie.",
"title": "Neznámá činnost použitá v: {automation}"
},
🤖 Prompt for AI Agents
In custom_components/spook/translations/cs.json around lines 244 to 247, the
placeholders were localized ({automatizace}, {upravit}, {služby},
{automatizaci}) but Home Assistant expects the original keys; revert those
placeholder identifiers back to the exact originals ({automation}, {edit},
{services}, {automation}) while leaving the Czech surrounding text unchanged so
formatting tokens match what the code provides.

Comment on lines +241 to +243
"description": "Spook이 자동화에서 유령을 발견했습니다 👻\n\n떠돌아다니는 동안 Spook이 다음 자동화를 발견했습니다:\n\n[{automation}]({edit}) (`{entity_id}`)\n\n이 자동화는 Home Assistant에서 알 수 없는 레이블을 참조합니다:\n\n{labels}\n\n\n\n이 오류를 수정하려면 [자동화를 편집]({edit})하여 존재하지 않는 참조 레이블을 제거하세요.\n\nSpook 👻 당신의 친구.",
"title": "알 수 없는 라벨 참조: {automation}"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Fix inconsistent terminology and a grammar error (“라벨/레이블”, “영역를”).

  • Use one consistent term for “label”: prefer “레이블” across description and title.
  • Correct the particle typo “영역를” → “영역을”.

Proposed edits:

-      "title": "알 수 없는 라벨 참조: {automation}"
+      "title": "알 수 없는 레이블 참조: {automation}"
-      "description": "Spook이 스크립트에서 유령을 발견했습니다 👻
+      "description": "Spook이 스크립트에서 유령을 발견했습니다 👻
 ...
-이 스크립트는 Home Assistant에서 알 수 없는 영역을 참조합니다:
+이 스크립트는 Home Assistant에서 알 수 없는 영역을 참조합니다:
 ...
-이 오류를 수정하려면 [스크립트를 편집]({edit})하여 존재하지 않는 참조 영역를 제거하세요.
+이 오류를 수정하려면 [스크립트를 편집]({edit})하여 존재하지 않는 참조 영역을 제거하세요.
-      "title": "알 수 없는 레이블을 참조: {script}"
+      "title": "알 수 없는 레이블 참조: {script}"

Also applies to: 292-295, 277-279

🤖 Prompt for AI Agents
In custom_components/spook/translations/ko.json around lines 241-243 (and also
apply same fixes at lines 277-279 and 292-295), the Korean text uses
inconsistent terms for “label” (혼용된 "라벨"/"레이블") and has a particle typo "영역를"
which should be "영역을"; standardize on "레이블" everywhere in both description and
title and correct "영역를" to "영역을" (and update any other occurrences noted) so
terminology and grammar are consistent.

Comment on lines +10 to +15
"choice_restart": {
"description": "In order for Spook to finish setting up, Home Assistant needs to be restarted.\n\nDo you want to restart Home Assistant now?",
"menu_options": {
"restart_now": "Restart now",
"restart_later": "Restart later"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Localize the restart copy for Latvian users.

The restart description and menu labels are in English. Please translate them into Latvian so the setup flow is fully localized.

🤖 Prompt for AI Agents
In custom_components/spook/translations/lv.json around lines 10 to 15 the
"choice_restart" strings are still in English; replace the "description" value
with a Latvian translation (preserving the "\n\n" line breaks) and translate the
"menu_options" labels "restart_now" and "restart_later" into Latvian so the
setup flow is fully localized.

Comment on lines +224 to +307
"automation_unknown_area_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {automation}"
},
"automation_unknown_device_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {automation}"
},
"automation_unknown_entity_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {automation}"
},
"automation_unknown_floor_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {automation}"
},
"automation_unknown_label_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {automation}"
},
"automation_unknown_service_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following actions, which are unknown to Home Assistant:\n\n{services}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing actions.\n\nSpook 👻 Your homie.",
"title": "Unknown actions used in: {automation}"
},
"group_unknown_members": {
"description": "Spook has found a ghost in your groups 👻\n\nWhile floating around, Spook crossed path with the following group:\n\n{group} (`{entity_id}`)\n\nThis group has members, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the group, remove the use of these non-existing entities and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown group members in: {group}"
},
"integration_unknown_source": {
"description": "Spook has found a ghost in your Riemann sum integral helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"lovelace_unknown_entity_references": {
"description": "Spook has found a ghost in your dashboards 👻\n\nWhile floating around, Spook crossed path with the following dashboard:\n\n[{dashboard}]({edit})\n\nThis dashboard references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the dashboard]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {dashboard}"
},
"proximity_unknown_ignored_zones": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is ignoring zones that are unknown to Home Assistant:\n\n{zones}\n\n\n\nTo fix this error, edit the configuration and remove this/these zones.\n\nSpook 👻 Your homie.",
"title": "Unknown ignored zones: {name}"
},
"proximity_unknown_tracked_entities": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is tracking persons or devices trackers that are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the configuration and remove this/these entities.\n\nSpook 👻 Your homie.",
"title": "Unknown tracked entities: {name}"
},
"proximity_unknown_zone": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is based on a zone that is unknown to Home Assistant:\n\n`{zone}`\n\n\n\nTo fix this error, as you can't change the zone of a proximity configuration, the only option is to remove this specific proximity integration instance.\n\nSpook 👻 Your homie.",
"title": "Unknown zone: {zone}"
},
"scene_unknown_entity_references": {
"description": "Spook has found a ghost in your scenes 👻\n\nWhile floating around, Spook crossed path with the following scene:\n\n[{scene}]({edit})\n\nThis scene references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the scene]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {scene}"
},
"script_unknown_area_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {script}"
},
"script_unknown_device_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {script}"
},
"script_unknown_entity_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {script}"
},
"script_unknown_floor_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {script}"
},
"script_unknown_label_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {script}"
},
"switch_as_x_unknown_source": {
"description": "Spook has found a ghost in your Switch as X helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source switch entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"utility_meter_unknown_source": {
"description": "Spook has found a ghost in your utility meter helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"trend_unknown_source": {
"description": "Spook has found a ghost in your trend helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Issue texts remain English—needs Latvian translation.

All entries under issues still use English descriptions/titles. This undermines the Latvian locale. Please translate these strings before landing.

🤖 Prompt for AI Agents
In custom_components/spook/translations/lv.json around lines 224 to 307, the
issue entries (automation_unknown_area_references,
automation_unknown_device_references, automation_unknown_entity_references,
automation_unknown_floor_references, automation_unknown_label_references,
automation_unknown_service_references, group_unknown_members,
integration_unknown_source, lovelace_unknown_entity_references,
proximity_unknown_ignored_zones, proximity_unknown_tracked_entities,
proximity_unknown_zone, scene_unknown_entity_references,
script_unknown_area_references, script_unknown_device_references,
script_unknown_entity_references, script_unknown_floor_references,
script_unknown_label_references, switch_as_x_unknown_source,
utility_meter_unknown_source, trend_unknown_source) are still in English;
translate both "description" and "title" values into Latvian, preserving
placeholders (e.g. {automation}, {edit}, {entity_id}, {areas}, {entities},
{devices}, {floors}, {labels}, {services}, {group}, {helper}, {source},
{dashboard}, {name}, {zones}, {scene}, {script}) and keeping emojis, markdown
links, code backticks and newlines intact; ensure grammar and punctuation suit
Latvian localization and that no placeholders are altered or removed.

Comment on lines +10 to +15
"choice_restart": {
"description": "In order for Spook to finish setting up, Home Assistant needs to be restarted.\n\nDo you want to restart Home Assistant now?",
"menu_options": {
"restart_now": "Restart now",
"restart_later": "Restart later"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Localize the restart prompt instead of shipping English fallback.

Line 11’s restart description (and associated menu labels) are still in English. Shipping untranslated UI text in the Bokmål file defeats the point of this locale and is a UX regression. Please provide the Norwegian translation for these strings before we accept the baseline.

🤖 Prompt for AI Agents
In custom_components/spook/translations/nb.json around lines 10 to 15, the
restart prompt and its menu labels are still in English; replace the English
strings with Norwegian Bokmål translations: set "description" to "For at Spook
skal fullføre oppsettet, må Home Assistant startes på nytt.\n\nVil du starte
Home Assistant på nytt nå?" and set the menu option labels to "restart_now":
"Start på nytt nå" and "restart_later": "Start på nytt senere".

Comment on lines +236 to +243
"automation_unknown_floor_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {automation}"
},
"automation_unknown_label_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {automation}"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Translate the remaining issue copy to Bokmål.

The texts for automation_unknown_floor_references / automation_unknown_label_references (and other nearby entries) are still the English originals. Users selecting Bokmål will see mixed-language issue messages, which is a poor localization experience. Please translate these descriptions/titles into Norwegian Bokmål.

🤖 Prompt for AI Agents
custom_components/spook/translations/nb.json around lines 236 to 243: the
description and title values for "automation_unknown_floor_references" and
"automation_unknown_label_references" are still in English; replace them with
proper Norwegian Bokmål translations while preserving all placeholder tokens
({automation}, {edit}, {entity_id}, {floors}, {labels}), formatting (newlines),
emoji, and JSON string escaping; ensure the translated strings keep the same
meaning/instructions and update any other nearby untranslated entries in this
file to Bokmål as well.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review continued from previous batch...

Comment on lines +311 to +314
"confirm": {
"description": "{description}",
"title": "{titel}"
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Broken placeholder key: {titel} should be {title}.

This prevents the dynamic title from rendering.

Apply this diff:

           "confirm": {
             "description": "{description}",
-            "title": "{titel}"
+            "title": "{title}"
           }
@@
-      "title": "{titel}"
+      "title": "{title}"

Also applies to: 317-318

🤖 Prompt for AI Agents
In custom_components/spook/translations/af.json around lines 311-314 (and also
at 317-318), the placeholder key "titel" is misspelled and should be "title";
update the JSON so the confirm.title uses "{title}" instead of "{titel}" in both
locations to restore dynamic title rendering and keep placeholders consistent.

Comment on lines +224 to +231
"automation_unknown_area_references": {
"description": "Spook знайшоў прывід у тваіх аўтаматызацыях 👻\n\nПлаваючы навокал, Spook сустрэў наступную аўтаматызацыю:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nГэтая аўтаматызацыя спасылаецца на наступныя зоны, якія невядомы для Home Assistant:\n\n{areas}\n\n\n\nКаб выправіць гэтую памылку, [адрэдагуй аўтаматызацыю]({edit}) і выдалі выкарыстанне гэтых неіснуючых зон.\n\nSpook 👻 Твой сябар.",
"title": "Невядомыя зоны выкарыстаны ў: {automation}"
},
"automation_unknown_device_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {automation}"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Inconsistent localization within issues

First issue (“automation_unknown_area_references”) is localized, others remain English. This inconsistency may feel jarring.

🤖 Prompt for AI Agents
custom_components/spook/translations/be.json around lines 224 to 231: the JSON
block mixes Belarusian localization for "automation_unknown_area_references"
with English text for "automation_unknown_device_references", causing
inconsistent user experience; translate the English strings (both description
and title) for "automation_unknown_device_references" into Belarusian to match
the surrounding entries, ensure placeholders
({automation},{edit},{entity_id},{devices}) and punctuation remain unchanged,
and keep JSON structure and escaping intact.

Comment on lines +2 to +330
"config": {
"abort": {
"already_spooked": "Yeah... well... no. K, thx, bye!"
},
"step": {
"user": {
"description": "Did you read the readme? Did you read the license? Are you really sure?"
},
"choice_restart": {
"description": "In order for Spook to finish setting up, Home Assistant needs to be restarted.\n\nDo you want to restart Home Assistant now?",
"menu_options": {
"restart_now": "Restart now",
"restart_later": "Restart later"
}
}
}
},
"entity": {
"button": {
"homeassistant_reload": {
"name": "Reload"
},
"homeassistant_restart": {
"name": "Restart"
},
"repairs_ignore_all": {
"name": "Ignore all"
},
"repairs_unignore_all": {
"name": "Unignore all"
}
},
"event": {
"repairs_event": {
"state_attributes": {
"event_type": {
"state": {
"create": "Issue created",
"remove": "Issue removed",
"update": "Issue updated"
}
},
"domain": {
"name": "Issue issuer"
},
"issue_id": {
"name": "Issue ID"
}
}
}
},
"sensor": {
"homeassistant_air_quality": {
"name": "Ποιότητα αέρα"
},
"homeassistant_alarm_control_panel": {
"name": "Πίνακες ελέγχου συναγερμού"
},
"homeassistant_area": {
"name": "Περιοχές"
},
"homeassistant_automation": {
"name": "Αυτοματισμοί"
},
"homeassistant_binary_sensor": {
"name": "Δυαδικοί αισθητήρες"
},
"homeassistant_button": {
"name": "Κουμπιά"
},
"homeassistant_calendar": {
"name": "Ημερολόγια"
},
"homeassistant_camera": {
"name": "Κάμερες"
},
"homeassistant_climate": {
"name": "Κλίμα"
},
"homeassistant_cover": {
"name": "Κάλυμμα"
},
"homeassistant_custom_component": {
"name": "Προσαρμοσμένες ενσωματώσεις"
},
"homeassistant_date": {
"name": "Ημερομηνίες"
},
"homeassistant_datetime": {
"name": "Ημερομηνία/ώρες"
},
"homeassistant_device": {
"name": "Συσκευές"
},
"homeassistant_device_tracker": {
"name": "Εντοπιστής συσκευών"
},
"homeassistant_entities": {
"name": "Οντότητες"
},
"homeassistant_fan": {
"name": "Ανεμιστήρες"
},
"homeassistant_humidifier": {
"name": "Υγραντήρες"
},
"homeassistant_image": {
"name": "Εικόνες"
},
"homeassistant_input_boolean": {
"name": "Διακόπτες"
},
"homeassistant_input_button": {
"name": "Κουμπιά"
},
"homeassistant_input_datetime": {
"name": "Ημερομηνία ή/και ώρα"
},
"homeassistant_input_number": {
"name": "Αριθμοί"
},
"homeassistant_input_select": {
"name": "Αναπτυσσόμενα μενού"
},
"homeassistant_input_text": {
"name": "Κείμενα"
},
"homeassistant_integration": {
"name": "Ενσωματώσεις"
},
"homeassistant_light": {
"name": "Φώτα"
},
"homeassistant_lock": {
"name": "Κλειδαριές"
},
"homeassistant_media_player": {
"name": "Συσκευές αναπαραγωγής"
},
"homeassistant_number": {
"name": "Αριθμοί"
},
"homeassistant_persistent_notification": {
"name": "Μόνιμες ειδοποιήσεις"
},
"homeassistant_person": {
"name": "Ατομα"
},
"homeassistant_remote": {
"name": "Τηλεχειριστήρια"
},
"homeassistant_scene": {
"name": "Σκηνές"
},
"homeassistant_script": {
"name": "Σενάρια"
},
"homeassistant_select": {
"name": "Επιλέγει"
},
"homeassistant_sensor": {
"name": "Αισθητήρες"
},
"homeassistant_siren": {
"name": "Σειρήνες"
},
"homeassistant_stt": {
"name": "Ομιλία σε κείμενο"
},
"homeassistant_sun": {
"name": "Ηλιοι"
},
"homeassistant_switch": {
"name": "Διακόπτες"
},
"homeassistant_text": {
"name": "Κείμενα"
},
"homeassistant_time": {
"name": "Χρόνος"
},
"homeassistant_tts": {
"name": "Κείμενο σε ομιλία"
},
"homeassistant_update": {
"name": "Ενημέρωση"
},
"homeassistant_vacuum": {
"name": "Σκούπες"
},
"homeassistant_water_heater": {
"name": "Θερμοσίφωνες"
},
"homeassistant_weather": {
"name": "Καιρός"
},
"homeassistant_zone": {
"name": "Ζώνες"
},
"repairs_total_issues": {
"name": "Σύνολο"
},
"repairs_ignored_issues": {
"name": "Αγνοημένα"
},
"repairs_active_issues": {
"name": "Ενεργό"
}
},
"switch": {
"cloud_alexa_report_state": {
"name": "Alexa αναφορά κατάστασης"
},
"cloud_google_report_state": {
"name": "Αναφορά κατάστασης του Βοηθού Google"
},
"cloud_remote": {
"name": "Τηλεχειριστήριο"
}
}
},
"issues": {
"automation_unknown_area_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {automation}"
},
"automation_unknown_device_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {automation}"
},
"automation_unknown_entity_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {automation}"
},
"automation_unknown_floor_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {automation}"
},
"automation_unknown_label_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {automation}"
},
"automation_unknown_service_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following actions, which are unknown to Home Assistant:\n\n{services}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing actions.\n\nSpook 👻 Your homie.",
"title": "Unknown actions used in: {automation}"
},
"group_unknown_members": {
"description": "Spook has found a ghost in your groups 👻\n\nWhile floating around, Spook crossed path with the following group:\n\n{group} (`{entity_id}`)\n\nThis group has members, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the group, remove the use of these non-existing entities and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown group members in: {group}"
},
"integration_unknown_source": {
"description": "Spook has found a ghost in your Riemann sum integral helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"lovelace_unknown_entity_references": {
"description": "Spook has found a ghost in your dashboards 👻\n\nWhile floating around, Spook crossed path with the following dashboard:\n\n[{dashboard}]({edit})\n\nThis dashboard references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the dashboard]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {dashboard}"
},
"proximity_unknown_ignored_zones": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is ignoring zones that are unknown to Home Assistant:\n\n{zones}\n\n\n\nTo fix this error, edit the configuration and remove this/these zones.\n\nSpook 👻 Your homie.",
"title": "Unknown ignored zones: {name}"
},
"proximity_unknown_tracked_entities": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is tracking persons or devices trackers that are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the configuration and remove this/these entities.\n\nSpook 👻 Your homie.",
"title": "Unknown tracked entities: {name}"
},
"proximity_unknown_zone": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is based on a zone that is unknown to Home Assistant:\n\n`{zone}`\n\n\n\nTo fix this error, as you can't change the zone of a proximity configuration, the only option is to remove this specific proximity integration instance.\n\nSpook 👻 Your homie.",
"title": "Unknown zone: {zone}"
},
"scene_unknown_entity_references": {
"description": "Spook has found a ghost in your scenes 👻\n\nWhile floating around, Spook crossed path with the following scene:\n\n[{scene}]({edit})\n\nThis scene references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the scene]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {scene}"
},
"script_unknown_area_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {script}"
},
"script_unknown_device_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {script}"
},
"script_unknown_entity_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {script}"
},
"script_unknown_floor_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {script}"
},
"script_unknown_label_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {script}"
},
"switch_as_x_unknown_source": {
"description": "Spook has found a ghost in your Switch as X helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source switch entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"utility_meter_unknown_source": {
"description": "Spook has found a ghost in your utility meter helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"trend_unknown_source": {
"description": "Spook has found a ghost in your trend helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"user_issue": {
"fix_flow": {
"step": {
"confirm": {
"description": "{description}",
"title": "{title}"
}
}
},
"title": "{title}"
},
"restart_required": {
"title": "Restart required",
"fix_flow": {
"step": {
"confirm_restart": {
"title": "Restart required",
"description": "In order for Spook 👻 to finish setting up, Home Assistant needs to be restarted.\n\nSelect submit to restart Home Assistant now."
}
}
}
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Greek localisation still shows English for most strings

The new Greek entries (config copy, sensor names, issue descriptions, restart flow) are still English apart from a few nouns, so the interface will present English text to Greek users. Since this PR’s goal is to provide localized baselines, the strings need to be translated properly into Greek before merge.

🤖 Prompt for AI Agents
custom_components/spook/translations/el.json lines 2-330, most strings remain
English; translate all untranslated UI strings into Greek while preserving
interpolation placeholders (e.g. {automation}, {edit}, {entity_id}, {areas},
etc.), keep JSON keys intact, follow the existing Greek style for nouns already
translated, ensure grammatically correct and context-appropriate phrasing for
config texts, sensor names and issue descriptions (including restart flow),
validate the JSON after changes and run a quick UI/l10n smoke test to confirm
placeholders render correctly.

Comment on lines +24 to +26
"homeassistant_restart": {
"name": "מנוחה"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Wrong label for Restart button.

" מְנוּחָה" means “rest” (sleep), not restart. Use a correct label (fallback English is fine for baseline).

Apply this diff:

       "homeassistant_restart": {
-        "name": "מנוחה"
+        "name": "Restart"
       },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"homeassistant_restart": {
"name": "מנוחה"
},
"homeassistant_restart": {
"name": "Restart"
},
🤖 Prompt for AI Agents
In custom_components/spook/translations/he.json around lines 24 to 26, the
Hebrew label for the Restart button is incorrect ("מנוחה" means rest/sleep);
replace that value with a correct translation such as "הפעל מחדש" or use the
English fallback "Restart" so the key "homeassistant_restart"."name" reads the
proper restart label.

Comment on lines +201 to +207
"repairs_total_issues": {
"name": "Total Total"
},
"repairs_ignored_issues": {
"name": "התעלמו"
},
"repairs_active_issues": {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Broken/odd counter wording.

"Total Total" is clearly wrong. Use “Total” to match reference.

       "repairs_total_issues": {
-        "name": "Total Total"
+        "name": "Total"
       },
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"repairs_total_issues": {
"name": "Total Total"
},
"repairs_ignored_issues": {
"name": "התעלמו"
},
"repairs_active_issues": {
"repairs_total_issues": {
"name": "Total"
},
"repairs_ignored_issues": {
"name": "התעלמו"
},
🤖 Prompt for AI Agents
In custom_components/spook/translations/he.json around lines 201 to 207, the
Hebrew translation value for "repairs_total_issues" is incorrect ("Total
Total"); change its "name" value to the single word "Total" to match the
reference and keep wording consistent with other translations. Ensure
surrounding JSON formatting and quoting remain valid after the update.

Comment on lines +226 to +227
"title": "אזורים לא ידועים בשימוש:"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Missing placeholders in multiple issue titles (breaks dynamic text).

These titles omit expected placeholders (e.g., {automation}, {group}, {script}). This will degrade UX and diverge from other locales.

Apply this diff to restore placeholders (English fallback is fine as a baseline):

-      "title": "אזורים לא ידועים בשימוש:"
+      "title": "Unknown areas used in: {automation}"
@@
-      "title": "מכשירים לא ידועים בשימוש:"
+      "title": "Unknown devices used in: {automation}"
@@
-      "title": "גופים לא ידועים בשימוש:"
+      "title": "Unknown entities used in: {automation}"
@@
-      "title": "חברים לא ידועים ב:"
+      "title": "Unknown group members in: {group}"
@@
-      "title": "אזורים לא ידועים בשימוש:"
+      "title": "Unknown areas used in: {script}"
@@
-      "title": "מכשירים לא ידועים בשימוש:"
+      "title": "Unknown devices used in: {script}"
@@
-      "title": "גופים לא ידועים בשימוש:"
+      "title": "Unknown entities used in: {script}"

Also applies to: 230-231, 234-235, 250-251, 278-279, 282-283, 286-287

🤖 Prompt for AI Agents
In custom_components/spook/translations/he.json around lines 226-227 (and also
apply same fix to ranges 230-231, 234-235, 250-251, 278-279, 282-283, 286-287),
several title strings are missing dynamic placeholders like {automation},
{group}, {script}; restore the appropriate placeholders in each affected title
to match the English fallback (e.g., "Unknown areas in use: {automation}",
"Unknown areas in use: {group}", etc.), ensuring placeholders are present and
correctly named so dynamic text renders properly and matches other locales.

Comment on lines +296 to +299
"switch_as_x_unknown_source": {
"description": "Spook מצא רוח רפאים ב-Switch שלך כמו X Helpers\n\nבזמן צף סביב, ספוק חצה את הנתיב עם העוזר הבא:\n\n(הופנה מהדף)\n\nעוזר זה יש ישות מתג מקור לא ידוע עוזר בית:\n\n[מקור] \"\n\n\n\nכדי לתקן את השגיאה הזו, לערוך את העוזר ולהתאים את ישות המקור (או להסיר את העוזר) ולחדש את עוזר הבית.\n\nלא את הרצח שלך.",
"title": "מקור לא ידוע: עזרה"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Corrupted Switch-as-X section (missing placeholders and localized content is nonsensical).

Restore standard description and title to ensure placeholders render.

-    "switch_as_x_unknown_source": {
-      "description": "Spook מצא רוח רפאים ב-Switch שלך כמו X Helpers\n\nבזמן צף סביב, ספוק חצה את הנתיב עם העוזר הבא:\n\n(הופנה מהדף)\n\nעוזר זה יש ישות מתג מקור לא ידוע עוזר בית:\n\n[מקור] \"\n\n\n\nכדי לתקן את השגיאה הזו, לערוך את העוזר ולהתאים את ישות המקור (או להסיר את העוזר) ולחדש את עוזר הבית.\n\nלא את הרצח שלך.",
-      "title": "מקור לא ידוע: עזרה"
-    },
+    "switch_as_x_unknown_source": {
+      "description": "Spook has found a ghost in your Switch as X helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source switch entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
+      "title": "Unknown source: {helper}"
+    },
🤖 Prompt for AI Agents
In custom_components/spook/translations/he.json around lines 296-299, the
"switch_as_x_unknown_source" entry is corrupted and contains nonsensical
localized text and missing placeholders; replace its description and title with
the standard/expected strings including the original placeholders (e.g.,
{entity_id}, {source}, or whatever placeholders the English template uses) and
ensure the description matches the canonical message structure so placeholders
render correctly and the title is localized properly.

Comment on lines +24 to +210
"homeassistant_restart": {
"name": "Riavvia"
},
"repairs_ignore_all": {
"name": "Ignora tutto"
},
"repairs_unignore_all": {
"name": "Unignore all"
}
},
"entity": {
"button": {
"homeassistant_reload": {
"name": "Ricarica"
},
"homeassistant_restart": {
"name": "Riavvia"
},
"repairs_ignore_all": {
"name": "Ignora tutto"
}
},
"sensor": {
"homeassistant_area": {
"name": "Aree"
},
"homeassistant_automation": {
"name": "Automazioni"
},
"homeassistant_climate": {
"name": "Climatizzatori"
},
"homeassistant_remote": {
"name": "Telecomandi"
},
"homeassistant_scene": {
"name": "Scenari"
},
"homeassistant_sensor": {
"name": "Sensori"
},
"homeassistant_calendar": {
"name": "Calendari"
},
"homeassistant_button": {
"name": "Pulsanti"
},
"homeassistant_device": {
"name": "Dispositivi"
},
"homeassistant_entities": {
"name": "Entità"
},
"homeassistant_fan": {
"name": "Ventole"
},
"homeassistant_humidifier": {
"name": "Umidificatori"
},
"homeassistant_image": {
"name": "Immagini"
},
"homeassistant_custom_component": {
"name": "Integrazioni personalizzate"
},
"homeassistant_air_quality": {
"name": "Qualità dell'aria"
},
"homeassistant_date": {
"name": "Date"
},
"homeassistant_device_tracker": {
"name": "Tracciamento dispositivi"
},
"homeassistant_person": {
"name": "Persone"
},
"homeassistant_weather": {
"name": "Meteo"
},
"homeassistant_integration": {
"name": "Integrazioni"
},
"homeassistant_number": {
"name": "Numeri"
},
"homeassistant_light": {
"name": "Luci"
},
"repairs_ignored_issues": {
"name": "Ignorato"
},
"homeassistant_script": {
"name": "Scripts"
},
"homeassistant_camera": {
"name": "Videocamere"
},
"homeassistant_datetime": {
"name": "Data/Ora"
},
"homeassistant_lock": {
"name": "Serrature"
},
"homeassistant_media_player": {
"name": "Media players"
},
"repairs_active_issues": {
"name": "Attivo"
},
"homeassistant_alarm_control_panel": {
"name": "Pannello controllo allarme"
},
"homeassistant_binary_sensor": {
"name": "Sensore binario"
},
"homeassistant_input_button": {
"name": "Pulsanti di input"
},
"homeassistant_siren": {
"name": "Sirene"
},
"homeassistant_stt": {
"name": "Speech-to-text"
},
"homeassistant_input_boolean": {
"name": "Ingresso Bouleano"
},
"homeassistant_input_datetime": {
"name": "Ingresso Data/Ora"
},
"homeassistant_input_number": {
"name": "Ingresso numerico"
}
},
"event": {
"repairs_event": {
"state_attributes": {
"event_type": {
"state": {
"create": "Anomalia creata",
"remove": "Anomalia rimossa",
"update": "Anomalia aggiornata"
}
},
"domain": {
"name": "Fonte anomalia"
},
"issue_id": {
"name": "ID Anomalia"
}
}
}
},
"switch": {
"cloud_remote": {
"name": "Telecomando"
},
"cloud_alexa_report_state": {
"name": "Segnalazione dello stato ad Alexa"
},
"cloud_google_report_state": {
"name": "Segnalazione dello stato all'assistente Google"
"event": {
"repairs_event": {
"state_attributes": {
"event_type": {
"state": {
"create": "Anomalia creata",
"remove": "Anomalia rimossa",
"update": "Anomalia aggiornata"
}
},
"domain": {
"name": "Fonte anomalia"
},
"issue_id": {
"name": "ID Anomalia"
}
}
}
},
"issues": {
"user_issue": {
"fix_flow": {
"step": {
"confirm": {
"description": "{descrizione}"
}
}
}
},
"restart_required": {
"sensor": {
"homeassistant_air_quality": {
"name": "Qualità dell'aria"
},
"homeassistant_alarm_control_panel": {
"name": "Pannello controllo allarme"
},
"homeassistant_area": {
"name": "Aree"
},
"homeassistant_automation": {
"name": "Automazioni"
},
"homeassistant_binary_sensor": {
"name": "Sensore binario"
},
"homeassistant_button": {
"name": "Pulsanti"
},
"homeassistant_calendar": {
"name": "Calendari"
},
"homeassistant_camera": {
"name": "Videocamere"
},
"homeassistant_climate": {
"name": "Climatizzatori"
},
"homeassistant_cover": {
"name": "Covers"
},
"homeassistant_custom_component": {
"name": "Integrazioni personalizzate"
},
"homeassistant_date": {
"name": "Date"
},
"homeassistant_datetime": {
"name": "Data/Ora"
},
"homeassistant_device": {
"name": "Dispositivi"
},
"homeassistant_device_tracker": {
"name": "Tracciamento dispositivi"
},
"homeassistant_entities": {
"name": "Entità"
},
"homeassistant_fan": {
"name": "Ventole"
},
"homeassistant_humidifier": {
"name": "Umidificatori"
},
"homeassistant_image": {
"name": "Immagini"
},
"homeassistant_input_boolean": {
"name": "Ingresso Bouleano"
},
"homeassistant_input_button": {
"name": "Pulsanti di input"
},
"homeassistant_input_datetime": {
"name": "Ingresso Data/Ora"
},
"homeassistant_input_number": {
"name": "Ingresso numerico"
},
"homeassistant_input_select": {
"name": "Input selects"
},
"homeassistant_input_text": {
"name": "Input texts"
},
"homeassistant_integration": {
"name": "Integrazioni"
},
"homeassistant_light": {
"name": "Luci"
},
"homeassistant_lock": {
"name": "Serrature"
},
"homeassistant_media_player": {
"name": "Media players"
},
"homeassistant_number": {
"name": "Numeri"
},
"homeassistant_persistent_notification": {
"name": "Persistent notifications"
},
"homeassistant_person": {
"name": "Persone"
},
"homeassistant_remote": {
"name": "Telecomandi"
},
"homeassistant_scene": {
"name": "Scenari"
},
"homeassistant_script": {
"name": "Scripts"
},
"homeassistant_select": {
"name": "Selects"
},
"homeassistant_sensor": {
"name": "Sensori"
},
"homeassistant_siren": {
"name": "Sirene"
},
"homeassistant_stt": {
"name": "Speech-to-text"
},
"homeassistant_sun": {
"name": "Suns"
},
"homeassistant_switch": {
"name": "Switches"
},
"homeassistant_text": {
"name": "Texts"
},
"homeassistant_time": {
"name": "Times"
},
"homeassistant_tts": {
"name": "Text-to-speech"
},
"homeassistant_update": {
"name": "Update"
},
"homeassistant_vacuum": {
"name": "Vacuums"
},
"homeassistant_water_heater": {
"name": "Water heaters"
},
"homeassistant_weather": {
"name": "Meteo"
},
"homeassistant_zone": {
"name": "Zones"
},
"repairs_total_issues": {
"name": "Total"
},
"repairs_ignored_issues": {
"name": "Ignorato"
},
"repairs_active_issues": {
"name": "Attivo"
}
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Italian entries still contain English/incorrect wording

Many Italian values are untouched English (e.g., repairs_unignore_all = “Unignore all”, multiple sensor names such as “Input selects”, “Media players”, “Persistent notifications”, etc.) or malformed (“Ingresso Bouleano”). This regresses the Italian UX versus the fallback English strings the platform already had. Please supply proper Italian translations across this block before landing.

🤖 Prompt for AI Agents
In custom_components/spook/translations/it.json around lines 24-210, multiple
Italian values remain in English or are malformed (e.g., repairs_unignore_all =
"Unignore all", "Media players", "Persistent notifications", "Input selects",
"Ingresso  Bouleano", "Suns", etc.); update each value to a proper Italian
translation and fix typos: replace repairs_unignore_all with an Italian phrase
(e.g., "Annulla ignorati" or "Ripristina ignorati"), translate sensor names like
"Media players" -> "Lettori multimediali", "Persistent notifications" ->
"Notifiche persistenti", "Input selects" -> "Selettori di input", "Input texts"
-> "Testi di input", "Selects" -> "Selettori", "Texts" -> "Testi", "Suns" ->
"Sole", "Covers" -> "Tapparelle/Coperture" (choose the most appropriate term),
"Switches" -> "Interruttori", and correct "Ingresso  Bouleano" to "Ingresso
booleano" (or a clearer localized term); scan the entire block and replace any
remaining English strings with accurate Italian equivalents, keeping
grammar/pluralization consistent with surrounding keys.

Comment on lines +2 to 329
"config": {
"abort": {
"already_spooked": "Yeah... well... no. K, thx, bye!"
},
"step": {
"user": {
"description": "Did you read the readme? Did you read the license? Are you really sure?"
},
"choice_restart": {
"description": "In order for Spook to finish setting up, Home Assistant needs to be restarted.\n\nDo you want to restart Home Assistant now?",
"menu_options": {
"restart_now": "Restart now",
"restart_later": "Restart later"
}
}
}
},
"entity": {
"button": {
"homeassistant_reload": {
"name": "ხელახლა ჩატვირთვა"
},
"homeassistant_restart": {
"name": "ხელახლა გაშვება"
},
"repairs_ignore_all": {
"name": "ყველას იგნორირება"
},
"repairs_unignore_all": {
"name": "ყველას გათვალისწინება"
}
},
"event": {
"repairs_event": {
"state_attributes": {
"event_type": {
"state": {
"create": "Issue created",
"remove": "Issue removed",
"update": "Issue updated"
}
},
"domain": {
"name": "Issue issuer"
},
"issue_id": {
"name": "Issue ID"
}
}
}
},
"sensor": {
"homeassistant_air_quality": {
"name": "Air quality"
},
"homeassistant_alarm_control_panel": {
"name": "Alarm control panels"
},
"homeassistant_area": {
"name": "ზონები"
},
"homeassistant_automation": {
"name": "Automations"
},
"homeassistant_binary_sensor": {
"name": "Binary sensors"
},
"homeassistant_button": {
"name": "Buttons"
},
"homeassistant_calendar": {
"name": "Calendars"
},
"homeassistant_camera": {
"name": "კამერები"
},
"homeassistant_climate": {
"name": "კლიმატი"
},
"homeassistant_cover": {
"name": "Covers"
},
"homeassistant_custom_component": {
"name": "Custom integrations"
},
"homeassistant_date": {
"name": "Dates"
},
"homeassistant_datetime": {
"name": "Date/times"
},
"homeassistant_device": {
"name": "მოწყობილობები"
},
"homeassistant_device_tracker": {
"name": "Device trackers"
},
"homeassistant_entities": {
"name": "ერთეულები"
},
"homeassistant_fan": {
"name": "Fans"
},
"homeassistant_humidifier": {
"name": "Humidifiers"
},
"homeassistant_image": {
"name": "Images"
},
"homeassistant_input_boolean": {
"name": "Input booleans"
},
"homeassistant_input_button": {
"name": "Input buttons"
},
"homeassistant_input_datetime": {
"name": "Input date/times"
},
"homeassistant_input_number": {
"name": "Input numbers"
},
"homeassistant_input_select": {
"name": "Input selects"
},
"homeassistant_input_text": {
"name": "Input texts"
},
"homeassistant_integration": {
"name": "Integrations"
},
"homeassistant_light": {
"name": "განათება"
},
"homeassistant_lock": {
"name": "Locks"
},
"homeassistant_media_player": {
"name": "Media players"
},
"homeassistant_number": {
"name": "Numbers"
},
"homeassistant_persistent_notification": {
"name": "Persistent notifications"
},
"homeassistant_person": {
"name": "Persons"
},
"homeassistant_remote": {
"name": "Remotes"
},
"homeassistant_scene": {
"name": "Scenes"
},
"homeassistant_script": {
"name": "Scripts"
},
"homeassistant_select": {
"name": "Selects"
},
"homeassistant_sensor": {
"name": "სენსორები"
},
"homeassistant_siren": {
"name": "Sirens"
},
"homeassistant_stt": {
"name": "Speech-to-text"
},
"homeassistant_sun": {
"name": "Suns"
},
"homeassistant_switch": {
"name": "ღილაკები"
},
"homeassistant_text": {
"name": "Texts"
},
"homeassistant_time": {
"name": "Times"
},
"homeassistant_tts": {
"name": "Text-to-speech"
},
"homeassistant_update": {
"name": "Update"
},
"homeassistant_vacuum": {
"name": "Vacuums"
},
"homeassistant_water_heater": {
"name": "Water heaters"
},
"homeassistant_weather": {
"name": "Weather"
},
"homeassistant_zone": {
"name": "Zones"
},
"repairs_total_issues": {
"name": "სულ"
},
"repairs_ignored_issues": {
"name": "იგნორირებული"
},
"repairs_active_issues": {
"name": "აქტიური"
}
},
"switch": {
"cloud_alexa_report_state": {
"name": "Alexa state reporting"
},
"cloud_google_report_state": {
"name": "Google Assistant state reporting"
},
"cloud_remote": {
"name": "Remote"
}
}
},
"issues": {
"automation_unknown_area_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {automation}"
},
"automation_unknown_device_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {automation}"
},
"automation_unknown_entity_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {automation}"
},
"automation_unknown_floor_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {automation}"
},
"automation_unknown_label_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {automation}"
},
"automation_unknown_service_references": {
"description": "Spook has found a ghost in your automations 👻\n\nWhile floating around, Spook crossed path with the following automation:\n\n[{automation}]({edit}) (`{entity_id}`)\n\nThis automation references the following actions, which are unknown to Home Assistant:\n\n{services}\n\n\n\nTo fix this error, [edit the automation]({edit}) and remove the use of these non-existing actions.\n\nSpook 👻 Your homie.",
"title": "Unknown actions used in: {automation}"
},
"group_unknown_members": {
"description": "Spook has found a ghost in your groups 👻\n\nWhile floating around, Spook crossed path with the following group:\n\n{group} (`{entity_id}`)\n\nThis group has members, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the group, remove the use of these non-existing entities and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown group members in: {group}"
},
"integration_unknown_source": {
"description": "Spook has found a ghost in your Riemann sum integral helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"lovelace_unknown_entity_references": {
"description": "Spook has found a ghost in your dashboards 👻\n\nWhile floating around, Spook crossed path with the following dashboard:\n\n[{dashboard}]({edit})\n\nThis dashboard references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the dashboard]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {dashboard}"
},
"proximity_unknown_ignored_zones": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is ignoring zones that are unknown to Home Assistant:\n\n{zones}\n\n\n\nTo fix this error, edit the configuration and remove this/these zones.\n\nSpook 👻 Your homie.",
"title": "Unknown ignored zones: {name}"
},
"proximity_unknown_tracked_entities": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is tracking persons or devices trackers that are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, edit the configuration and remove this/these entities.\n\nSpook 👻 Your homie.",
"title": "Unknown tracked entities: {name}"
},
"proximity_unknown_zone": {
"description": "Spook has found a ghost in your proximity configuration 👻\n\nWhile floating around, Spook crossed path with the following proximity configuration:\n\n{name}\n\nThis configuration is based on a zone that is unknown to Home Assistant:\n\n`{zone}`\n\n\n\nTo fix this error, as you can't change the zone of a proximity configuration, the only option is to remove this specific proximity integration instance.\n\nSpook 👻 Your homie.",
"title": "Unknown zone: {zone}"
},
"scene_unknown_entity_references": {
"description": "Spook has found a ghost in your scenes 👻\n\nWhile floating around, Spook crossed path with the following scene:\n\n[{scene}]({edit})\n\nThis scene references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the scene]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {scene}"
},
"script_unknown_area_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following areas, which are unknown to Home Assistant:\n\n{areas}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing areas.\n\nSpook 👻 Your homie.",
"title": "Unknown areas used in: {script}"
},
"script_unknown_device_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following devices, which are unknown to Home Assistant:\n\n{devices}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing devices.\n\nSpook 👻 Your homie.",
"title": "Unknown devices used in: {script}"
},
"script_unknown_entity_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following entities, which are unknown to Home Assistant:\n\n{entities}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing entities.\n\nSpook 👻 Your homie.",
"title": "Unknown entities used in: {script}"
},
"script_unknown_floor_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following floors, which are unknown to Home Assistant:\n\n{floors}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing floors.\n\nSpook 👻 Your homie.",
"title": "Unknown floors used in: {script}"
},
"script_unknown_label_references": {
"description": "Spook has found a ghost in your scripts 👻\n\nWhile floating around, Spook crossed path with the following script:\n\n[{script}]({edit}) (`{entity_id}`)\n\nThis script references the following labels, which are unknown to Home Assistant:\n\n{labels}\n\n\n\nTo fix this error, [edit the script]({edit}) and remove the use of these non-existing labels.\n\nSpook 👻 Your homie.",
"title": "Unknown labels used in: {script}"
},
"switch_as_x_unknown_source": {
"description": "Spook has found a ghost in your Switch as X helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source switch entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"utility_meter_unknown_source": {
"description": "Spook has found a ghost in your utility meter helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"trend_unknown_source": {
"description": "Spook has found a ghost in your trend helpers 👻\n\nWhile floating around, Spook crossed path with the following helper:\n\n{helper} (`{entity_id}`)\n\nThis helper has a source entity unknown to Home Assistant:\n\n`{source}`\n\n\n\nTo fix this error, edit the helper and adjust the source entity (or remove the helper) and restart Home Assistant.\n\nSpook 👻 Your homie.",
"title": "Unknown source: {helper}"
},
"user_issue": {
"title": "{title}",
"fix_flow": {
"step": {
"confirm": {
"description": "{description}",
"title": "{title}"
}
}
},
"title": "{title}"
},
"restart_required": {
"title": "Restart required",
"fix_flow": {
"step": {
"confirm_restart": {
"title": "Restart required",
"description": "In order for Spook 👻 to finish setting up, Home Assistant needs to be restarted.\n\nSelect submit to restart Home Assistant now."
}
}
}
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Georgian file is largely English

Almost the entire Georgian translation (config prompts, sensor names, issue descriptions) remains in English with only a handful of localized words. That leaves Georgian users with inconsistent, often English UI strings, which is worse than letting the core fallback handle it. Please replace these placeholders with real Georgian translations.

🤖 Prompt for AI Agents
custom_components/spook/translations/ka.json lines 2-329: the Georgian
translation file contains mostly English text; replace placeholder English
strings (config prompts, entity/sensor names, issue titles/descriptions,
buttons, etc.) with proper Georgian translations throughout the file, ensuring
consistency and completeness (translate every "name", "title", "description",
menu option and message), preserve template placeholders like {automation},
{edit}, {entity_id} intact, and keep JSON structure/escaping unchanged so Home
Assistant can load the locale file.

Comment on lines +99 to +176
"homeassistant_entities": {
"name": "Entities"
},
"homeassistant_device": {
"name": "Įrenginiai"
"homeassistant_fan": {
"name": "Fans"
},
"homeassistant_automation": {
"name": "Automatizacijos"
"homeassistant_humidifier": {
"name": "Humidifiers"
},
"homeassistant_image": {
"name": "Images"
},
"homeassistant_input_boolean": {
"name": "Input booleans"
},
"homeassistant_input_button": {
"name": "Input buttons"
},
"homeassistant_input_datetime": {
"name": "Input date/times"
},
"homeassistant_input_number": {
"name": "Input numbers"
},
"homeassistant_input_select": {
"name": "Input selects"
},
"homeassistant_input_text": {
"name": "Input texts"
},
"homeassistant_integration": {
"name": "Integrations"
},
"homeassistant_light": {
"name": "Lights"
},
"homeassistant_lock": {
"name": "Locks"
},
"homeassistant_media_player": {
"name": "Media players"
},
"homeassistant_number": {
"name": "Numbers"
},
"homeassistant_persistent_notification": {
"name": "Persistent notifications"
},
"homeassistant_person": {
"name": "Persons"
},
"homeassistant_remote": {
"name": "Remotes"
},
"homeassistant_scene": {
"name": "Scenes"
},
"homeassistant_script": {
"name": "Scripts"
},
"homeassistant_select": {
"name": "Selects"
},
"homeassistant_sensor": {
"name": "Sensors"
},
"homeassistant_siren": {
"name": "Sirens"
},
"homeassistant_stt": {
"name": "Speech-to-text"
},
"homeassistant_sun": {
"name": "Suns"
},
"homeassistant_switch": {
"name": "Switches"
},
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Lithuanian labels still in English – please localize

Several of the newly added Lithuanian sensor names remain in English (e.g., homeassistant_entities, homeassistant_fan, homeassistant_humidifier, homeassistant_light, homeassistant_switch, etc.). Shipping these as-is means Lithuanian users continue to see untranslated UI strings, defeating the goal of this PR. Please replace the English placeholders with proper Lithuanian translations before merging.

🤖 Prompt for AI Agents
In custom_components/spook/translations/lt.json around lines 99 to 176, several
"name" values are left in English (e.g., Entities, Fans, Humidifiers, Lights,
Switches, etc.); replace each English placeholder with the correct Lithuanian
translation for the corresponding Home Assistant entity (update the "name"
strings inside each object to the proper Lithuanian word/phrase), ensure
spelling/diacritics are correct, and keep JSON formatting valid (use UTF-8
encoding and preserve commas/quoting).

@frenck
Copy link
Copy Markdown
Owner Author

frenck commented Sep 25, 2025

Thats a nice addition. I am wondering whether it would be senseful to have some kind of GitHub workflow that checks when a new string is added that is is present in other languages and if not might even use AI automatically add it?

Not stuff I want to automate to be honest. There is a fallback implemented.

@frenck frenck merged commit 3438a07 into main Sep 25, 2025
17 of 18 checks passed
@frenck frenck deleted the frenck-2025-0401 branch September 25, 2025 14:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement Enhancement of the code, not introducing new features.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants