From 287a068ada8080dbb4553978efd8897172ca4928 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Fri, 6 Dec 2024 08:11:17 +0100 Subject: [PATCH] Add localisation to voice wizard (#23169) * Add localization to voice wizard * more --- .../cloud/cloud-step-intro.ts | 19 +++- .../cloud/cloud-step-signin.ts | 6 +- .../cloud/cloud-step-signup.ts | 24 +++-- .../voice-assistant-setup-dialog.ts | 8 +- .../voice-assistant-setup-step-area.ts | 21 ++++- ...e-assistant-setup-step-change-wake-word.ts | 19 ++-- .../voice-assistant-setup-step-check.ts | 35 +++++-- .../voice-assistant-setup-step-local.ts | 91 ++++++++++++++----- .../voice-assistant-setup-step-pipeline.ts | 70 +++++++++++--- .../voice-assistant-setup-step-success.ts | 11 ++- .../voice-assistant-setup-step-update.ts | 13 ++- .../voice-assistant-setup-step-wake-word.ts | 39 ++++++-- src/translations/en.json | 83 +++++++++++++++++ 13 files changed, 346 insertions(+), 93 deletions(-) diff --git a/src/dialogs/voice-assistant-setup/cloud/cloud-step-intro.ts b/src/dialogs/voice-assistant-setup/cloud/cloud-step-intro.ts index cc00cf7c8108..c2edcf494906 100644 --- a/src/dialogs/voice-assistant-setup/cloud/cloud-step-intro.ts +++ b/src/dialogs/voice-assistant-setup/cloud/cloud-step-intro.ts @@ -18,7 +18,11 @@ export class CloudStepIntro extends LitElement { src=${`/static/images/logo_nabu_casa${this.hass.themes?.darkMode ? "_dark" : ""}.png`} alt="Nabu Casa logo" /> -

The power of Home Assistant Cloud

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.cloud.title" + )} +

@@ -45,12 +49,15 @@ export class CloudStepIntro extends LitElement {

- Remote access + ${this.hass.localize( + "ui.panel.config.voice_assistants.assistants.cloud.features.remote_access.title" + )}

- Secure remote access to your system while supporting the - development of Home Assistant. + ${this.hass.localize( + "ui.panel.config.voice_assistants.assistants.cloud.features.remote_access.text" + )}

@@ -101,7 +108,9 @@ export class CloudStepIntro extends LitElement { Try 1 month for free${this.hass.localize( + "ui.panel.config.cloud.register.headline" + )}
`; } diff --git a/src/dialogs/voice-assistant-setup/cloud/cloud-step-signin.ts b/src/dialogs/voice-assistant-setup/cloud/cloud-step-signin.ts index 4d17b2569364..d4c36636822f 100644 --- a/src/dialogs/voice-assistant-setup/cloud/cloud-step-signin.ts +++ b/src/dialogs/voice-assistant-setup/cloud/cloud-step-signin.ts @@ -32,7 +32,7 @@ export class CloudStepSignin extends LitElement { src=${`/static/images/logo_nabu_casa${this.hass.themes?.darkMode ? "_dark" : ""}.png`} alt="Nabu Casa logo" /> -

Sign in

+

${this.hass.localize("ui.panel.config.cloud.login.sign_in")}

${this._error ? html`${this._error}` : ""} @@ -73,7 +73,9 @@ export class CloudStepSignin extends LitElement { unelevated @click=${this._handleLogin} .disabled=${this._requestInProgress} - >Sign in${this.hass.localize( + "ui.panel.config.cloud.login.sign_in" + )} `; } diff --git a/src/dialogs/voice-assistant-setup/cloud/cloud-step-signup.ts b/src/dialogs/voice-assistant-setup/cloud/cloud-step-signup.ts index 0ec6ef0a6955..3e8437fe2f41 100644 --- a/src/dialogs/voice-assistant-setup/cloud/cloud-step-signup.ts +++ b/src/dialogs/voice-assistant-setup/cloud/cloud-step-signup.ts @@ -40,14 +40,18 @@ export class CloudStepSignup extends LitElement { src=${`/static/images/logo_nabu_casa${this.hass.themes?.darkMode ? "_dark" : ""}.png`} alt="Nabu Casa logo" /> -

Sign up

+

+ ${this.hass.localize("ui.panel.config.cloud.register.create_account")} +

${this._error ? html`${this._error}` : ""} ${this._state === "VERIFY" ? html`

- Check the email we just sent to ${this._email} and click the - confirmation link to continue. + ${this.hass.localize( + "ui.panel.config.cloud.register.confirm_email", + { email: this._email } + )}

` : html`Send the email again${this.hass.localize( + "ui.panel.config.cloud.register.resend_confirm_email" + )}I clicked the link${this.hass.localize( + "ui.panel.config.cloud.register.clicked_confirm" + )}` : html`Sign in${this.hass.localize( + "ui.panel.config.cloud.login.sign_in" + )} Next${this.hass.localize("ui.common.next")}`} `; } diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts index 66c0f4ad1fd2..eadf4a901af6 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-dialog.ts @@ -145,7 +145,9 @@ export class HaVoiceAssistantSetupDialog extends LitElement { @click=${this._goToNextStep} class="skip-btn" slot="actionItems" - >Skip${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.skip" + )}` : nothing} @@ -164,7 +166,9 @@ export class HaVoiceAssistantSetupDialog extends LitElement { )} >` : assistEntityState?.state === UNAVAILABLE - ? html`Your voice assistant is not available.` + ? this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.not_available" + ) : this._step === STEP.CHECK ? html` -

Select area

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.area.title" + )} +

- When you voice assistant knows where it is, it can better control the - devices around it. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.area.secondary" + )}

`; } private async _setArea() { const area = this.shadowRoot!.querySelector("ha-area-picker")!.value; if (!area) { - showAlertDialog(this, { text: "Please select an area" }); + showAlertDialog(this, { + text: this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.area.no_selection" + ), + }); return; } await updateDeviceRegistryEntry(this.hass, this.deviceId, { diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-change-wake-word.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-change-wake-word.ts index c5894c7651e7..645d2ce8dee1 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-change-wake-word.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-change-wake-word.ts @@ -1,14 +1,13 @@ import { css, html, LitElement } from "lit"; import { customElement, property } from "lit/decorators"; import { fireEvent } from "../../common/dom/fire_event"; +import "../../components/ha-md-list"; +import "../../components/ha-md-list-item"; import type { AssistSatelliteConfiguration } from "../../data/assist_satellite"; import { setWakeWords } from "../../data/assist_satellite"; import type { HomeAssistant } from "../../types"; -import { STEP } from "./voice-assistant-setup-dialog"; import { AssistantSetupStyles } from "./styles"; -import "../../components/ha-md-list"; -import "../../components/ha-md-list-item"; -import { formatLanguageCode } from "../../common/language/format_language"; +import { STEP } from "./voice-assistant-setup-dialog"; @customElement("ha-voice-assistant-setup-step-change-wake-word") export class HaVoiceAssistantSetupStepChangeWakeWord extends LitElement { @@ -25,11 +24,15 @@ export class HaVoiceAssistantSetupStepChangeWakeWord extends LitElement { src="/static/images/voice-assistant/change-wake-word.png" alt="Casita Home Assistant logo" /> -

Change wake word

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.change_wake_word.title" + )} +

- Some wake words are better for - ${formatLanguageCode(this.hass.locale.language, this.hass.locale)} and - voice than others. Please try them out. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.change_wake_word.secondary" + )}

diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-check.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-check.ts index eba258fa6a6a..31d8032dc2b1 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-check.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-check.ts @@ -40,11 +40,15 @@ export class HaVoiceAssistantSetupStepCheck extends LitElement { src="/static/images/voice-assistant/error.png" alt="Casita Home Assistant error logo" /> -

The voice assistant is unable to connect to Home Assistant

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.check.failed_title" + )} +

- To play audio, the voice assistant device has to connect to Home - Assistant to fetch the files. Our test shows that the device is - unable to reach the Home Assistant server. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.check.failed_secondary" + )}

` : html`Casita Home Assistant hi logo -

Hi

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.check.title" + )} +

- Over the next couple steps we're going to personalize your voice - assistant. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.check.secondary" + )}

${this._showLoader diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-local.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-local.ts index b0279b6098d9..e4ff17d33fec 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-local.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-local.ts @@ -54,9 +54,15 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { src="/static/images/voice-assistant/update.png" alt="Casita Home Assistant loading logo" /> -

Installing add-ons

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.title" + )} +

- The Whisper and Piper add-ons are being installed and configured. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.secondary" + )}

@@ -67,13 +73,20 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { src="/static/images/voice-assistant/error.png" alt="Casita Home Assistant error logo" /> -

Failed to install add-ons

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.failed_title" + )} +

${this._error}

- We could not automatically install a local TTS and STT provider - for you. Read the documentation to learn how to install them. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.failed_secondary" + )}

- Go back + ${this.hass.localize("ui.common.back")} - Learn more ` : this._state === "NOT_SUPPORTED" @@ -92,13 +107,19 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { src="/static/images/voice-assistant/error.png" alt="Casita Home Assistant error logo" /> -

Installation of add-ons is not supported on your system

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.not_supported_title" + )} +

- Your system is not supported to automatically install a local - TTS and STT provider. Learn how to set up local TTS and STT - providers in the documentation. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.not_supported_secondary" + )}

- Go back + ${this.hass.localize("ui.common.back")} - Learn more ` : nothing} @@ -155,29 +178,43 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { const piper = addons.find((addon) => addon.slug === "core_piper"); if (!this._localTts.length) { if (!piper) { - this._detailState = "Installing Piper add-on"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.installing_piper" + ); await installHassioAddon(this.hass, "core_piper"); } if (!piper || piper.state !== "started") { - this._detailState = "Starting Piper add-on"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.starting_piper" + ); await startHassioAddon(this.hass, "core_piper"); } - this._detailState = "Setting up Piper"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.setup_piper" + ); await this._setupConfigEntry("piper"); } if (!this._localStt.length) { if (!whisper) { - this._detailState = "Installing Whisper add-on"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.installing_whisper" + ); await installHassioAddon(this.hass, "core_whisper"); } if (!whisper || whisper.state !== "started") { - this._detailState = "Starting Whisper add-on"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.starting_whisper" + ); await startHassioAddon(this.hass, "core_whisper"); } - this._detailState = "Setting up Whisper"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.setup_whisper" + ); await this._setupConfigEntry("whisper"); } - this._detailState = "Creating assistant"; + this._detailState = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.state.creating_pipeline" + ); await this._findEntitiesAndCreatePipeline(); } catch (e: any) { this._state = "ERROR"; @@ -234,7 +271,7 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { }); if (step.type !== "create_entry") { throw new Error( - `Failed to create entry for ${addon}${"errors" in step ? `: ${step.errors.base}` : ""}` + `${this.hass.localize("ui.panel.config.voice_assistants.satellite_wizard.local.errors.failed_create_entry", { addon })}${"errors" in step ? `: ${step.errors.base}` : ""}` ); } } @@ -322,7 +359,9 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { ) ).providers.find((provider) => provider.engine_id === sttEntityId); - let pipelineName = "Local Assistant"; + let pipelineName = this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.local_pipeline" + ); let i = 1; while ( pipelines.pipelines.find( @@ -330,7 +369,7 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { (pipeline) => pipeline.name === pipelineName ) ) { - pipelineName = `Local Assistant ${i}`; + pipelineName = `${this.hass.localize("ui.panel.config.voice_assistants.satellite_wizard.local.local_pipeline")} ${i}`; i++; } @@ -353,7 +392,11 @@ export class HaVoiceAssistantSetupStepLocal extends LitElement { this._findLocalEntities(); if (!this._localTts?.length || !this._localStt?.length) { if (tryNo > 3) { - throw new Error("Could not find local TTS and STT entities"); + throw new Error( + this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.local.errors.could_not_find_entities" + ) + ); } await new Promise((resolve) => { setTimeout(resolve, 2000); diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-pipeline.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-pipeline.ts index d008d312f045..e75e4260cfd5 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-pipeline.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-pipeline.ts @@ -14,9 +14,9 @@ import { fetchCloudStatus } from "../../data/cloud"; import { listSTTEngines } from "../../data/stt"; import { listTTSEngines, listTTSVoices } from "../../data/tts"; import type { HomeAssistant } from "../../types"; +import { documentationUrl } from "../../util/documentation-url"; import { AssistantSetupStyles } from "./styles"; import { STEP } from "./voice-assistant-setup-dialog"; -import { documentationUrl } from "../../util/documentation-url"; @customElement("ha-voice-assistant-setup-step-pipeline") export class HaVoiceAssistantSetupStepPipeline extends LitElement { @@ -69,10 +69,15 @@ export class HaVoiceAssistantSetupStepPipeline extends LitElement { } return html`
-

What hardware do you want to use?

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.title" + )} +

- How quickly your assistant responds depends on the power of the - hardware. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.secondary" + )}

@@ -80,7 +85,12 @@ export class HaVoiceAssistantSetupStepPipeline extends LitElement { ${!this._showFirst ? "…" : "Turn on the lights in the bedroom"}
${this._showFirst - ? html`
0.2 seconds
` + ? html`
+ 0.2 + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.seconds" + )} +
` : nothing} ${this._showFirst ? html`
@@ -88,12 +98,23 @@ export class HaVoiceAssistantSetupStepPipeline extends LitElement {
` : nothing} ${this._showSecond - ? html`
0.4 seconds
` + ? html`
+ 0.4 + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.seconds" + )} +
` : nothing}

Home Assistant Cloud

-

Ideal if you don't have a powerful system at home.

- Learn more +

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.cloud.description" + )} +

+ ${this.hass.localize("ui.panel.config.common.learn_more")}
@@ -101,7 +122,12 @@ export class HaVoiceAssistantSetupStepPipeline extends LitElement { ${!this._showThird ? "…" : "Turn on the lights in the bedroom"}
${this._showThird - ? html`
3 seconds
` + ? html`
+ 3 + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.seconds" + )} +
` : nothing} ${this._showThird ? html`
@@ -109,13 +135,23 @@ export class HaVoiceAssistantSetupStepPipeline extends LitElement {
` : nothing} ${this._showFourth - ? html`
5 seconds
` + ? html`
+ 5 + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.seconds" + )} +
` : nothing}
-

Do-it-yourself

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.local.title" + )} +

- Install add-ons or containers to run it on your own system. Powerful - hardware is needed for fast responses. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.local.description" + )}

- Learn more Setup with add-ons${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.pipeline.local.setup" + )}
diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-success.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-success.ts index 4b8e88fcb4a9..27e0a188d805 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-success.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-success.ts @@ -72,10 +72,15 @@ export class HaVoiceAssistantSetupStepSuccess extends LitElement { src="/static/images/voice-assistant/heart.png" alt="Casita Home Assistant logo" /> -

Ready to Assist!

+

+ ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.success.title" + )} +

- Make any final customizations here. You can always change these in the - Voice Assistants section of the settings page. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.success.secondary" + )}

${this.assistConfiguration && diff --git a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-update.ts b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-update.ts index cba6ebec50b8..4c61291f8145 100644 --- a/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-update.ts +++ b/src/dialogs/voice-assistant-setup/voice-assistant-setup-step-update.ts @@ -72,12 +72,17 @@ export class HaVoiceAssistantSetupStepUpdate extends LitElement {

${stateObj && (stateObj.state === "unavailable" || updateIsInstalling(stateObj)) - ? "Updating your voice assistant" - : "Checking for updates"} + ? this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.update.title" + ) + : this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.update.checking" + )}

- We are making sure you have the latest and greatest version of your - voice assistant. This may take a few minutes. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.update.secondary" + )}

- Say “${this._activeWakeWord(this.assistConfiguration)}” to wake the - device up + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.wake_word.title", + { wakeword: this._activeWakeWord(this.assistConfiguration) } + )}

-

Setup will continue once the device is awake.

+

${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.wake_word.secondary" + )}

` : html`Casita Home Assistant logo

- Say “${this._activeWakeWord(this.assistConfiguration)}” again + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.wake_word.title_2", + { wakeword: this._activeWakeWord(this.assistConfiguration) } + )}

- To make sure the wake word works for you. + ${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.wake_word.secondary_2" + )}

`} ${this._timedout ? html`We have not heard the wake word, is your device muted?${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.wake_word.time_out" + )}` : this._muteSwitchEntity && this.hass.states[this._muteSwitchEntity].state === "on" - ? html`Please unmute your device to continue.${this.hass.localize( + "ui.panel.config.voice_assistants.satellite_wizard.wake_word.muted_description" + )}` : nothing} `; } diff --git a/src/translations/en.json b/src/translations/en.json index ec56a5416ad0..56760493285f 100644 --- a/src/translations/en.json +++ b/src/translations/en.json @@ -2771,6 +2771,10 @@ "speech": { "title": "Amazing speech options for Assist", "text": "Bring personality to your home by having it speak to you using our neural-network powered speech-to-text and text-to-speech services." + }, + "remote_access": { + "title": "Remote access", + "text": " Secure remote access to your system while supporting the development of Home Assistant." } }, "and_more": "And more", @@ -2824,6 +2828,83 @@ "expose_to": "to {assistants}", "expose_entities": "Expose {count} {count, plural,\n one {entity}\n other {entities}\n}" } + }, + "satellite_wizard": { + "skip": "Skip", + "not_available": "Your voice assistant is not available.", + "update": { + "title": "Updating", + "checking": "Checking for updates", + "secondary": "We are making sure you have the latest updates. This may take a few minutes." + }, + "check": { + "title": "Hello!", + "secondary": "Over the next couple steps we're going to personalize your voice assistant.", + "failed_title": "The voice assistant is unable to connect to Home Assistant", + "failed_secondary": "To play audio, the voice assistant device has to connect to Home Assistant to fetch the files. Our test shows that the device is unable to reach the Home Assistant server.", + "help": "Help me", + "retry": "Retry" + }, + "wake_word": { + "title": "Say ''{wakeword}'' to wake the device up", + "secondary": "Setup will continue once the device is awake.", + "title_2": "Say ''{wakeword}'' again", + "secondary_2": "To make sure the wake word works for you.", + "change_wake_word": "Change wake word", + "time_out": "We have not heard the wake word, is your device muted?", + "muted": "Your device is muted", + "muted_description": "Please unmute your device to continue." + }, + "change_wake_word": { + "title": "Change wake word", + "secondary": "These are the phrases you can use to wake your device and have it start listening for commands." + }, + "area": { + "title": "Select area", + "secondary": "When your voice assistant knows where it is, it can better control the devices around it. This allows you to control devices in the room with short commands, like 'turn on the lights'", + "no_selection": "Please select an area" + }, + "pipeline": { + "title": "What hardware do you want to use?", + "secondary": "How quickly your assistant responds depends on the power of the hardware.", + "seconds": "seconds", + "cloud": { + "description": "Ideal if you don't have a powerful system at home." + }, + "local": { "title": "", "description": "", "setup": "" } + }, + "cloud": { + "title": "The power of Home Assistant Cloud", + "register": { + "confirm_email": "Confirm email" + } + }, + "local": { + "title": "Installing add-ons", + "secondary": "The Whisper and Piper add-ons are being installed and configured based on your hardware.", + "failed_title": "Failed to install add-ons", + "failed_secondary": "We were unable to install the Whisper and Piper add-ons automatically for you. Read the documentation to learn how to install them.", + "not_supported_title": "Installation of add-ons is not supported on your system", + "not_supported_secondary": "Your system is not supported to automatically install a local TTS and STT provider. Learn how to set up local TTS and STT providers in the documentation.", + "local_pipeline": "Local Assistant", + "state": { + "installing_piper": "Installing Piper add-on", + "starting_piper": "Starting Piper add-on", + "setup_piper": "Setting up Piper", + "installing_whisper": "Installing Whisper add-on", + "starting_whisper": "Starting Whisper add-on", + "setup_whisper": "Setting up Whisper", + "creating_pipeline": "Creating assistant" + }, + "errors": { + "failed_create_entry": "Failed to create entry for {addon}", + "could_not_find_entities": "Could not find local TTS and STT entities" + } + }, + "success": { + "title": "Ready to Assist!", + "secondary": "Make any final customizations here. You can always change these in the Voice Assistants section of the settings page." + } } }, "automation": { @@ -3967,6 +4048,8 @@ "password_error_msg": "Passwords are at least 8 characters", "start_trial": "Start trial", "resend_confirm_email": "Resend confirmation email", + "clicked_confirm": "I clicked the confirmation link", + "confirm_email": "Check the email we just sent to {email} and click the confirmation link to continue.", "account_created": "Account created! Check your email for instructions on how to activate your account." }, "account": {