<?php

/**
 * Lightweight reply-language helpers for AI Setup (match user message language).
 */
class SLN_AI_Language
{
	/**
	 * Coarse language from WordPress admin/user locale (for welcome UI before any user message).
	 *
	 * @return string en|it|es|fr|de|pt
	 */
	public static function fromWpLocale()
	{
		$locale = function_exists('get_user_locale') ? get_user_locale() : get_locale();
		$locale = strtolower(str_replace('_', '-', (string) $locale));
		if (strpos($locale, 'it') === 0) {
			return 'it';
		}
		if (strpos($locale, 'es') === 0 || strpos($locale, 'gl') === 0 || strpos($locale, 'ca') === 0) {
			return 'es';
		}
		if (strpos($locale, 'fr') === 0) {
			return 'fr';
		}
		if (strpos($locale, 'de') === 0) {
			return 'de';
		}
		if (strpos($locale, 'pt') === 0) {
			return 'pt';
		}

		return 'en';
	}

	/**
	 * BCP-47 tag for Web Speech API from the admin locale.
	 *
	 * @return string
	 */
	public static function speechBcp47()
	{
		$map = array(
			'it' => 'it-IT',
			'es' => 'es-ES',
			'fr' => 'fr-FR',
			'de' => 'de-DE',
			'pt' => 'pt-PT',
			'en' => 'en-US',
		);
		$lang = self::fromWpLocale();

		return isset($map[ $lang ]) ? $map[ $lang ] : 'en-US';
	}

	/**
	 * Localized first welcome (page or calendar widget). Uses admin locale.
	 *
	 * @param string $variant page|widget
	 * @param bool   $multishop
	 * @return string
	 */
	public static function welcomeMessage($variant = 'page', $multishop = false)
	{
		$lang = self::fromWpLocale();
		$key  = $variant === 'widget' ? 'welcome_widget' : 'welcome_page';
		$enPage = 'Hi — I can create and edit reservations, configure non-secret Salon settings, and manage services/assistants. I’ll preview changes before saving. For API keys, OAuth secrets, or license I’ll open the right Settings screen.';
		$enWidget = 'Hi — ask me to create or edit bookings, change settings, or update services/assistants. I’ll preview before saving.';
		$fallback = $variant === 'widget' ? $enWidget : $enPage;
		$msg      = self::phrase($lang, $key, $fallback);
		if ($multishop) {
			$msg .= ' ' . self::phrase(
				$lang,
				'welcome_multishop',
				'Multi-shop is active — name the location when changing hours, holidays, identity, or diagnosing availability (e.g. “for shop Downtown”).'
			);
		}

		return $msg;
	}

	/**
	 * Detect a coarse language code from free text.
	 *
	 * @param string $text
	 * @return string en|it|es|fr|de|pt
	 */
	public static function detect($text)
	{
		$text = (string) $text;
		if ($text === '') {
			return 'en';
		}

		$lower = self::fold(mb_strtolower($text, 'UTF-8'));

		$scores = array(
			'it' => 0,
			'es' => 0,
			'fr' => 0,
			'de' => 0,
			'pt' => 0,
			'en' => 0,
		);

		$markers = array(
			'it' => array(
				' il ', ' lo ', ' la ', ' gli ', ' delle ', ' della ', ' sono ', ' aperto ', ' aperta ',
				' prenotazione ', ' prenotazioni ', ' prenotare ', ' orari ', ' chiuso ', ' chiusa ', ' perche ',
				' non disponibile ', ' trova ', ' trovami ', ' qualsiasi ', ' questo ', ' mese ',
				' cerca ', ' lunedi ', ' martedi ', ' mercoledi ',
				' giovedi ', ' venerdi ', ' sabato ', ' domenica ', ' feriali ', ' bozza ', ' errore ',
				' grazie ', ' vorrei ', ' come ', ' perche ', ' dalle ', ' alle ',
			),
			'es' => array(
				' el ', ' los ', ' las ', ' estoy ', ' abierto ', ' abierta ', ' reserva ', ' citas ',
				' horario ', ' cerrado ', ' por que ', ' no disponible ', ' busca ', ' encontrar ',
				' lunes ', ' martes ', ' miercoles ', ' jueves ', ' viernes ', ' sabado ', ' domingo ',
				' gracias ', ' quiero ',
			),
			'fr' => array(
				' le ', ' les ', ' des ', ' je ', ' suis ', ' ouvert ', ' ouverte ', ' reservation ',
				' rendez-vous ', ' horaires ', ' ferme ', ' fermee ', ' pourquoi ', ' indisponible ',
				' trouver ', ' lundi ', ' mardi ', ' mercredi ', ' jeudi ', ' vendredi ', ' samedi ',
				' dimanche ', ' merci ', ' je voudrais ',
			),
			'de' => array(
				' der ', ' die ', ' das ', ' und ', ' ich ', ' bin ', ' geoffnet ', ' offen ',
				' termin ', ' buchung ', ' oeffnungszeiten ', ' geschlossen ', ' warum ',
				' nicht verfugbar ', ' finden ', ' montag ', ' dienstag ', ' mittwoch ',
				'donnerstag ', ' freitag ', ' samstag ', ' sonntag ', ' danke ',
			),
			// NB: no bare articles that collide with English words (“as”, “a”, “o” …).
			'pt' => array(
				' os ', ' estou ', ' aberto ', ' aberta ', ' reserva ', ' reservas ', ' agendamento ',
				' horario ', ' fechado ', ' porque ', ' nao disponivel ', ' encontrar ',
				' segunda ', ' terca ', ' quarta ', ' quinta ', ' sexta ', ' sabado ', ' domingo ',
				' obrigado ', ' quero ',
			),
			'en' => array(
				' the ', ' and ', ' open ', ' closed ', ' booking ', ' bookings ', ' appointment ',
				' hours ', ' available ', ' unavailable ', ' find ', ' monday ', ' tuesday ',
				' wednesday ', ' please ', ' want ', ' all ', ' mark ', ' pending ', ' show ',
			),
		);

		$padded = ' ' . $lower . ' ';
		foreach ($markers as $lang => $words) {
			foreach ($words as $w) {
				if (strpos($padded, $w) !== false) {
					$scores[ $lang ] += 2;
				}
			}
		}

		// Accent / morphology hints.
		if (preg_match('/[àèéìòù]/u', $text)) {
			$scores['it'] += 3;
			$scores['fr'] += 1;
		}
		if (preg_match('/[ñ¿¡]/u', $text)) {
			$scores['es'] += 4;
		}
		if (preg_match('/[ãõç]/u', $text)) {
			$scores['pt'] += 3;
		}
		if (preg_match('/[äöüß]/iu', $text)) {
			$scores['de'] += 4;
		}

		arsort($scores);
		$top = key($scores);
		if ($scores[ $top ] <= 0) {
			return 'en';
		}
		// Tie with English means no real evidence for another language — an
		// ambiguous marker (“as”, “die” …) must never flip the reply language.
		if ($scores[ $top ] === $scores['en']) {
			return 'en';
		}

		return $top;
	}

	/**
	 * Localized mock reply. Falls back to English $fallback when no map entry.
	 *
	 * @param string $lang
	 * @param string $key
	 * @param string $fallback English fallback (already translated via __() ok for en).
	 * @param array  $args     sprintf args
	 * @return string
	 */
	public static function phrase($lang, $key, $fallback, array $args = array())
	{
		$lang  = $lang ? $lang : 'en';
		$map   = self::phrases();
		$template = $fallback;
		if ($lang !== 'en' && isset($map[ $lang ][ $key ])) {
			$template = $map[ $lang ][ $key ];
		}
		if ($args) {
			return vsprintf($template, $args);
		}

		return $template;
	}

	/**
	 * Fold accents for matching.
	 *
	 * @param string $text
	 * @return string
	 */
	public static function fold($text)
	{
		$text = (string) $text;
		if (function_exists('iconv')) {
			$folded = @iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $text);
			if (is_string($folded) && $folded !== '') {
				$text = $folded;
			}
		}
		$from = array('à', 'á', 'â', 'ã', 'ä', 'å', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ñ', 'ç', 'ß', 'À', 'Á', 'È', 'É', 'Ì', 'Í', 'Ò', 'Ó', 'Ù', 'Ú', 'Ñ', 'Ç');
		$to   = array('a', 'a', 'a', 'a', 'a', 'a', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'n', 'c', 'ss', 'A', 'A', 'E', 'E', 'I', 'I', 'O', 'O', 'U', 'U', 'N', 'C');

		return str_replace($from, $to, $text);
	}

	/**
	 * @return array<string,array<string,string>>
	 */
	private static function phrases()
	{
		return array(
			'it' => array(
				'welcome_page'       => 'Ciao — posso configurare impostazioni non segrete, creare o modificare prenotazioni, e gestire servizi/assistenti. Mostro un’anteprima prima di salvare. Per API key, OAuth o licenza ti indico Impostazioni.',
				'welcome_widget'     => 'Ciao — chiedimi di creare o modificare prenotazioni, cambiare impostazioni, o aggiornare servizi/assistenti. Mostro un’anteprima prima di salvare.',
				'welcome_multishop'  => 'Multi-shop attivo — indica la sede quando cambi orari, festivi, identità o diagnostichi la disponibilità (es. “per il salone Centro”).',
				'guidance_lead'      => 'Ecco cosa ho trovato:',
				'changelog_lead'     => 'Ecco le novità nelle ultime versioni di Salon Booking System%1$s:',
				'changelog_more'     => 'Changelog pubblico completo: %1$s',
				'confirm_lead'       => 'Ho preparato una modifica in base a quello che mi hai detto. Controlla e conferma.',
				'found_bookings_one' => 'Trovata 1 prenotazione:',
				'found_bookings_many'=> 'Trovate %d prenotazioni:',
				'no_booking_id'      => 'Nessuna prenotazione con id %d (incluse bozze ed ERROR).',
				'no_bookings'        => 'Nessuna prenotazione trovata. Prova con id, nome, email o telefono — bozze ed ERROR sono incluse.',
				'bookings_include'   => 'In questa ricerca sono inclusi anche bozze e stato ERROR.',
				'open_booking'       => 'Apri prenotazione',
				'no_date'            => '(senza data)',
				'status_draft'       => 'Bozza',
				'create_booking'     => 'Preparo una nuova prenotazione. Controlla e conferma per salvare.',
				'create_bookings'    => 'Preparo quelle prenotazioni. Controlla e conferma per salvare.',
				'update_booking'     => 'Preparo la modifica della prenotazione. Controlla e conferma per salvare.',
				'create_booking_summary' => 'Crea prenotazione:',
				'create_bookings_summary' => 'Crea %d prenotazioni:',
				'update_booking_summary' => 'Aggiorna prenotazione #%d:',
				'booking_current'    => 'Attuale:',
				'booking_proposed'   => 'Proposta:',
				'booking_dates'      => 'Date:',
				'booking_created'    => 'Prenotazione #%d creata.',
				'bookings_created'   => 'Create %d prenotazioni: #%s.',
				'bookings_create_partial' => 'Alcune date non sono riuscite: %s.',
				'booking_updated'    => 'Prenotazione #%d aggiornata.',
				'ask_create_booking' => 'Per creare una prenotazione mi servono data, ora, servizio e nome o email del cliente. Es.: “Crea una prenotazione per Mario Rossi, Haircut, 2026-08-12 alle 10:00”.',
				'ask_create_bookings'=> 'Per creare più prenotazioni mi servono ora, servizio, cliente e le date oppure “prossimi N lunedì”.',
				'ask_update_booking_id' => 'Quale prenotazione modifico? Dimmi l’id (es. #16) oppure chiedimi prima di trovarla.',
				'ask_update_booking_fields' => 'Cosa cambio su quella prenotazione — data, ora, servizio, cliente o stato?',
				'find_discount'      => 'Controllo i tuoi sconti / coupon.',
				'found_discounts_one'=> 'Trovato 1 sconto:',
				'found_discounts_many'=> 'Trovati %d sconti:',
				'no_discount_id'     => 'Nessuno sconto con id %d.',
				'no_discounts'       => 'Nessuno sconto trovato. Prova con id, nome o codice coupon — oppure chiedi l’elenco senza filtri.',
				'open_discount'      => 'Apri sconto',
				'open_discounts'     => 'Apri Sconti',
				'discount_system_off'=> 'Il sistema sconti è disattivato. Attivalo prima (o chiedimi di abilitare enable_discount_system), poi apri Sconti.',
				'discount_addon_missing' => 'L’add-on Discount non è disponibile su questo sito.',
				'find_customer'      => 'Cerco quel cliente.',
				'found_customers_one'=> 'Trovato 1 cliente:',
				'found_customers_many'=> 'Trovati %d clienti:',
				'no_customer_id'     => 'Nessun cliente con id %d.',
				'no_customers'       => 'Nessun cliente trovato. Prova con id, nome, email o telefono — oppure chiedi l’elenco senza filtri.',
				'open_customer'      => 'Apri cliente',
				'open_customers'     => 'Apri Clienti',
				'find_service'       => 'Controllo i tuoi servizi.',
				'found_services_one' => 'Trovato 1 servizio:',
				'found_services_many'=> 'Trovati %d servizi:',
				'no_service_id'      => 'Nessun servizio con id %d.',
				'no_services'        => 'Nessun servizio trovato. Prova con id o nome — oppure chiedi l’elenco senza filtri.',
				'open_service'       => 'Apri servizio',
				'open_services'      => 'Apri Servizi',
				'find_assistant'     => 'Controllo i tuoi assistenti.',
				'found_assistants_one'=> 'Trovato 1 assistente:',
				'found_assistants_many'=> 'Trovati %d assistenti:',
				'no_assistant_id'    => 'Nessun assistente con id %d.',
				'no_assistants'      => 'Nessun assistente trovato. Prova con id o nome — oppure chiedi l’elenco senza filtri.',
				'open_assistant'     => 'Apri assistente',
				'open_assistants'    => 'Apri Assistenti',
				'empty_prompt'       => 'Cosa vuoi fare? Prenotazioni, orari, festivi, notifiche, servizi, assistenti — o dove incollare le API key.',
				'shop_got_it'        => 'Perfetto — uso quel salone. Controlla l’anteprima.',
				'check_details'      => 'Controllo con i dettagli che mi hai dato.',
				'unavailable_need_more' => 'Puoi darmi qualche dettaglio in più — ad esempio data, ora e servizio — così controllo meglio?',
				'unavailable_ok_subject' => 'Ho controllato %s e dalle regole attuali non risulta bloccato.',
				'unavailable_ok'     => 'Con i dettagli che mi hai dato, dalle regole attuali non risulta bloccato.',
				'unavailable_refresh'=> 'Se i clienti non lo vedono ancora nel form, prova un refresh o aggiorna Impostazioni una volta per svuotare la cache prenotazioni.',
				'unavailable_why_one'=> 'Ecco perché %1$s non è prenotabile: %2$s',
				'unavailable_why_one_bare' => 'Ecco perché non è prenotabile: %s',
				'unavailable_why_two'=> 'Ecco perché %1$s non è prenotabile. %2$s Inoltre, %3$s',
				'unavailable_why_two_bare' => 'Ecco perché non è prenotabile. %1$s Inoltre, %2$s',
				'unavailable_why_many' => 'Ecco perché %s non è prenotabile:',
				'unavailable_why_many_bare' => 'Ecco perché non è prenotabile:',
				'unavailable_also_share' => 'Per confermare meglio, dimmi anche: %s.',
				'unavailable_subject_with' => '%1$s il %2$s con %3$s',
				'unavailable_subject_on' => '%1$s il %2$s',
				'unavailable_when_at'=> 'j F Y \\a\\l\\l\\e H:i',
				'unavailable_engine_generic' => 'Il motore di prenotazione rifiuta questo slot (capacità, durata o un conflitto).',
				'unavailable_capacity_overlap_lead' => 'Non si può iniziare alle %1$s perché durante quella prestazione la capacità è già al completo alle %2$s.',
				'unavailable_capacity_at' => 'La capacità è già al completo alle %s.',
				'setting_units_per_session' => 'Persone per sessione',
				'setting_customers_per_session' => 'Clienti per ogni sessione',
				'setting_multiple_customers' => 'Clienti per sessione',
				'unavailable_cap_setting_customers' => 'Lo determina Impostazioni → Booking → “%1$s” (ora %2$d). Aumentalo se il salone può accettare più prenotazioni sovrapposte.',
				'unavailable_cap_setting_units' => 'Lo determina l’impostazione “%2$s” del servizio%1$s (ora %3$d): capacità concorrente di quel servizio. Apri il servizio per aumentarla se più clienti possono prenotare lo stesso slot.',
				'unavailable_cap_setting_assistant_off' => 'Lo determina l’assistente%1$s: “%2$s” è disattivato, quindi una sola prenotazione lo occupa per tutta la durata. Attivalo solo se può servire più clienti insieme.',
				'unavailable_cap_setting_assistant_on' => 'L’assistente%1$s ha “%2$s” attivo, quindi il limite è “%3$s” (ora %4$d) sul servizio / impostazioni booking — quel numero di prenotazioni sovrapposte riempie già lo slot.',
				'unavailable_cap_setting_units_short' => 'Servizio “%1$s” = %2$d',
				'unavailable_cap_setting_customers_short' => 'Salone “%1$s” = %2$d',
				'unavailable_cap_setting_multi_short' => 'Assistente “%1$s” = %2$s',
				'unavailable_cap_setting_generic' => 'Impostazioni di capacità rilevanti: %s.',
				'unavailable_full_means' => '“Al completo” significa che è già stato raggiunto un limite di prenotazioni sovrapposte per una parte dell’appuntamento. Quel limite viene da “Persone per sessione” (servizio), “Clienti per ogni sessione” (Impostazioni → Booking) e/o “Clienti per sessione” (checkbox assistente).',
				'unavailable_full_settings_intro' => 'Impostazioni che lo determinano:',
				'unavailable_full_setting_units_line' => '“%1$s” sul servizio%2$s → ora %3$d (prenotazioni concorrenti permesse per quel servizio).',
				'unavailable_full_setting_customers_line' => '“%1$s” in Impostazioni → Booking → ora %2$d (prenotazioni sovrapposte permesse a livello salone).',
				'unavailable_full_setting_multi_line' => '“%1$s” sull’assistente%2$s → %3$s. Off = una prenotazione riempie l’assistente; On = vale il limite Persone/Clienti per sessione.',
				'unavailable_full_hint_units' => 'In questo caso il blocco è “Persone per sessione” del servizio. Aumentalo nella scheda del servizio se più clienti possono fare quel servizio insieme.',
				'unavailable_full_hint_customers' => 'In questo caso il blocco è “Clienti per ogni sessione” del salone (Impostazioni → Booking).',
				'unavailable_full_hint_assistant_off' => 'In questo caso il blocco è l’assistente: “Clienti per sessione” è disattivato, quindi è esclusivo per quello slot.',
				'unavailable_full_hint_assistant_on' => 'In questo caso l’assistente accetta più clienti, ma il limite Persone/Clienti per sessione è già raggiunto.',
				'open_customers_per_session' => 'Apri Clienti per ogni sessione',
				'open_units_per_session' => 'Apri Persone per sessione (servizio)',
				'open_multiple_customers' => 'Apri Clienti per sessione (assistente)',
				'on' => 'attivo',
				'off' => 'disattivo',
				'unavailable_full_check_calendar' => 'Controlla anche il calendario intorno a %s per prenotazioni sovrapposte che consumano quella capacità.',
				'unavailable_full_check_calendar_bare' => 'Controlla il calendario per prenotazioni sovrapposte, oppure aumenta Persone/Clienti per sessione se più clienti possono essere serviti in parallelo.',
				'fallback_help'      => 'Dimmi cosa configurare — orari, festivi, notifiche, pagamenti, pagine, servizi/assistenti — oppure chiedimi dove incollare le API key di pagamento/SMS/OAuth. Posso anche suggerire funzionalità o add-on (waitlist, kiosk, multi-shop…).',
				'capability_lead'    => 'Ti indico la funzionalità o l’add-on più adatto.',
				'capability_suggest' => 'In base a quello che mi hai chiesto, queste funzionalità o add-on possono aiutarti:',
				'capability_browse'  => 'Ecco le funzionalità e gli add-on rilevanti di Salon Booking System:',
				'capability_none'    => 'Non ho trovato una corrispondenza chiara. Prova a nominare l’obiettivo (es. waitlist, kiosk, pagamenti, multi-shop), oppure apri Extensions.',
				'capability_kind_addon' => 'Add-on',
				'capability_kind_feature' => 'Funzionalità',
				'capability_pro'     => 'PRO',
				'open_extensions'    => 'Apri Extensions',
				'open_settings'      => 'Apri impostazioni',
				'open_addons_page'   => 'Add-on ufficiali',
				'find_booking'       => 'Cerco quella prenotazione (incluse bozze e stato ERROR).',
				'count_bookings'     => 'Conto le tue prenotazioni.',
				'count_bookings_total' => 'Hai %1$d prenotazioni %2$s.',
				'count_bookings_by_status' => 'Per stato:',
				'count_bookings_excl_draft' => 'Le bozze sono escluse.',
				'count_bookings_excl_error' => 'Le prenotazioni in ERROR sono escluse.',
				'count_bookings_on_day' => 'il %s',
				'count_bookings_between' => 'dal %1$s al %2$s',
				'count_bookings_until' => 'fino al %s',
				'count_bookings_from' => 'dal %s in poi',
				'count_bookings_all_time' => 'in totale',
				'open_calendar'      => 'Apri calendario',
				'here_configure'     => 'Ecco dove configurarlo:',
				'update_identity'    => 'Aggiorno i dati del salone. Conferma l’anteprima per applicare.',
				'create_service'     => 'Creo/aggiorno quel servizio. Conferma l’anteprima per applicare.',
				'create_assistant'   => 'Creo/aggiorno quell’assistente. Conferma l’anteprima per applicare.',
				'current_holidays'   => 'Ecco le chiusure festive attuali:',
				'ask_holiday_dates'  => 'Quali date devono essere chiuse? Ad esempio “25 dicembre”, “dal 10 al 20 agosto” o “Natale”.',
				'holiday_preview'    => 'Ok — ecco la chiusura che ho capito. Controlla e conferma per applicare.',
				'clear_holidays'     => 'Rimuovo tutte le chiusure festive. Conferma l’anteprima per applicare.',
				'current_hours'      => 'Ecco gli orari di apertura attuali:',
				'ask_closing'        => 'Certo — che orario di chiusura uso? Ad esempio 20:00.',
				'hours_preview'      => 'Ok — ecco cosa ho capito. Controlla l’anteprima e conferma per applicare.',
				'ask_hours'          => 'Perfetto — aperto %s. Che orari? Puoi dire “9-18” o “9:00–18:00”.',
				'ask_days'           => 'Orari annotati. A quali giorni li applico? Ad esempio “lunedì a sabato” o “feriali”.',
				'none'               => '(nessuno)',
				'no_hours'           => 'Nessun orario configurato.',
				'per_shop'           => 'Per salone:',
				'chip_first_service' => 'Crea il mio primo servizio: Taglio, 30 minuti, 25€',
				'chip_payments'      => 'Come accetto pagamenti online?',
				'chip_sms'           => 'Come attivo i promemoria SMS?',
				'chip_discounts'     => 'Come creo un codice sconto?',
				'chip_gcal'          => 'Come collego Google Calendar?',
				'chip_waitlist'      => 'Come recupero le cancellazioni last-minute?',
				'chip_kiosk'         => 'I walk-in possono prenotare da un tablet in salone?',
				'chip_hours'         => 'Sono aperto dal lunedì al sabato 9-18',
				'chip_holidays'      => 'Chiusi il 25 dicembre',
				'chip_booking'       => 'Crea una prenotazione per Mario Rossi, Taglio, domani alle 10:00',
				'chip_find'          => 'Trova la prenotazione #16',
				'attendance_not_supported' => 'Non posso ancora aggiornare lo stato presenze/no-show, nemmeno in blocco. Puoi segnare ogni prenotazione come no-show dalla lista Prenotazioni o dal calendario: %s',
				'booking_need_fields' => 'Per creare la prenotazione mi serve anche: %s. Me lo puoi fornire?',
				'field_first_name'   => 'il nome del cliente',
				'field_last_name'    => 'il cognome del cliente',
				'field_email'        => 'l’indirizzo email del cliente',
				'field_phone'        => 'il cellulare del cliente',
			),
			'es' => array(
				'welcome_page'       => 'Hola — puedo configurar casi todos los ajustes no secretos de Salon: horarios, festivos, identidad, reglas de reserva, notificaciones, comportamiento de SMS/pagos (sin claves), Google Calendar (si está conectado), páginas, servicios/asistentes/recursos/descuentos, estilo y más. Mostraré una vista previa antes de guardar. Para API keys, OAuth o licencia te indico la pantalla de Ajustes.',
				'welcome_widget'     => 'Hola — pídeme cambiar ajustes (horarios, notificaciones, pagos, páginas…), crear o actualizar servicios/asistentes/recursos/descuentos, u otro ajuste no secreto. Mostraré una vista previa antes de guardar.',
				'welcome_multishop'  => 'Multi-shop activo — indica la ubicación al cambiar horarios, festivos, identidad o al diagnosticar disponibilidad (p. ej. “para la tienda Centro”).',
				'guidance_lead'      => 'Esto es lo que encontré:',
				'changelog_lead'     => 'Estas son las novedades en las versiones recientes de Salon Booking System%1$s:',
				'changelog_more'     => 'Changelog público completo: %1$s',
				'confirm_lead'       => 'Preparé un cambio según lo que me dijiste. Revisa y confirma.',
				'found_bookings_one' => 'Encontrada 1 reserva:',
				'found_bookings_many'=> 'Encontradas %d reservas:',
				'no_booking_id'      => 'No hay reserva con id %d (incluye borradores y ERROR).',
				'no_bookings'        => 'No hay reservas. Prueba id, nombre, email o teléfono — se incluyen borradores y ERROR.',
				'bookings_include'   => 'Esta búsqueda incluye borradores y estado ERROR.',
				'open_booking'       => 'Abrir reserva',
				'no_date'            => '(sin fecha)',
				'status_draft'       => 'Borrador',
				'empty_prompt'       => '¿Qué quieres configurar? Horarios, festivos, notificaciones, pagos, páginas, servicios, asistentes — o dónde pegar las API keys.',
				'shop_got_it'        => 'Hecho — uso ese local. Revisa la vista previa.',
				'check_details'      => 'Lo reviso con los datos que me diste.',
				'unavailable_need_more' => '¿Puedes darme un poco más de detalle — por ejemplo fecha, hora y servicio — para comprobarlo bien?',
				'unavailable_ok_subject' => 'Revisé %s y con las reglas actuales no veo un bloqueo claro.',
				'unavailable_ok'     => 'Con los datos que diste, las reglas actuales no bloquean esto claramente.',
				'unavailable_refresh'=> 'Si los clientes aún no lo ven en el formulario, prueba actualizar la página o guardar Ajustes una vez para vaciar la caché de reservas.',
				'unavailable_why_one'=> 'Por esto %1$s no está disponible: %2$s',
				'unavailable_why_one_bare' => 'Por esto no está disponible: %s',
				'unavailable_why_two'=> 'Por esto %1$s no está disponible. %2$s Además, %3$s',
				'unavailable_why_two_bare' => 'Por esto no está disponible. %1$s Además, %2$s',
				'unavailable_why_many' => 'Por esto %s no está disponible:',
				'unavailable_why_many_bare' => 'Por esto no está disponible:',
				'unavailable_also_share' => 'Para confirmar mejor, indícame también: %s.',
				'unavailable_subject_with' => '%1$s el %2$s con %3$s',
				'unavailable_subject_on' => '%1$s el %2$s',
				'unavailable_when_at'=> 'j F Y \\a\\ \\l\\a\\s H:i',
				'unavailable_engine_generic' => 'El motor de reservas rechaza este hueco (capacidad, duración o un conflicto).',
				'unavailable_capacity_overlap_lead' => 'No puede empezar a las %1$s porque durante esa cita la capacidad ya está completa a las %2$s.',
				'unavailable_capacity_at' => 'La capacidad ya está completa a las %s.',
				'setting_units_per_session' => 'Units per session',
				'setting_customers_per_session' => 'Customers per session',
				'setting_multiple_customers' => 'Multiple Customers per Session',
				'unavailable_cap_setting_customers' => 'Lo determina Ajustes → Booking → “%1$s” (ahora %2$d). Súbelo si el salón puede aceptar más reservas solapadas.',
				'unavailable_cap_setting_units' => 'Lo determina el ajuste “%2$s” del servicio%1$s (ahora %3$d): capacidad concurrente de ese servicio.',
				'unavailable_cap_setting_assistant_off' => 'Lo determina el asistente%1$s: “%2$s” está desactivado, así que una reserva lo ocupa toda la duración.',
				'unavailable_cap_setting_assistant_on' => 'El asistente%1$s tiene “%2$s” activo, así que el límite es “%3$s” (ahora %4$d).',
				'unavailable_full_means' => '“Completo” significa que ya se alcanzó un límite de reservas solapadas. Ese límite viene de “Units per session” (servicio), “Customers per session” (Ajustes → Booking) y/o “Multiple Customers per Session” (asistente).',
				'unavailable_full_settings_intro' => 'Ajustes que lo determinan:',
				'unavailable_full_setting_units_line' => '“%1$s” en el servicio%2$s → ahora %3$d.',
				'unavailable_full_setting_customers_line' => '“%1$s” en Ajustes → Booking → ahora %2$d.',
				'unavailable_full_setting_multi_line' => '“%1$s” en el asistente%2$s → %3$s.',
				'unavailable_full_hint_units' => 'En este caso el bloqueo es “Units per session” del servicio.',
				'unavailable_full_hint_customers' => 'En este caso el bloqueo es “Customers per session” del salón (Ajustes → Booking).',
				'unavailable_full_hint_assistant_off' => 'En este caso el bloqueo es el asistente: “Multiple Customers per Session” está off.',
				'unavailable_full_hint_assistant_on' => 'En este caso el asistente admite varios clientes, pero el límite Units/Customers per session ya está alcanzado.',
				'open_customers_per_session' => 'Abrir Customers per session',
				'open_units_per_session' => 'Abrir Units per session (servicio)',
				'open_multiple_customers' => 'Abrir Multiple Customers per Session (asistente)',
				'on' => 'on',
				'off' => 'off',
				'unavailable_cap_setting_units_short' => 'Servicio “%1$s” = %2$d',
				'unavailable_cap_setting_customers_short' => 'Salón “%1$s” = %2$d',
				'unavailable_cap_setting_multi_short' => 'Asistente “%1$s” = %2$s',
				'unavailable_cap_setting_generic' => 'Ajustes de capacidad relevantes: %s.',
				'unavailable_full_check_calendar' => 'Revisa también el calendario alrededor de %s por reservas solapadas que consumen esa capacidad.',
				'unavailable_full_check_calendar_bare' => 'Revisa el calendario por reservas solapadas, o aumenta Units/Customers per session si se pueden atender más clientes en paralelo.',
				'fallback_help'      => 'Dime qué configurar — horarios, festivos, notificaciones, pagos, páginas, servicios/asistentes — o pregunta dónde pegar las API keys de pago/SMS/OAuth. También puedo sugerir funciones o add-ons (waitlist, kiosk, multi-shop…).',
				'capability_lead'    => 'Te indico la función o el add-on más adecuado.',
				'capability_suggest' => 'Según lo que pediste, estas funciones o add-ons pueden ayudar:',
				'capability_browse'  => 'Estas son capacidades y add-ons relevantes de Salon Booking System:',
				'capability_none'    => 'No encontré una coincidencia clara. Nombra el objetivo (p. ej. waitlist, kiosk, pagos, multi-shop) o abre Extensions.',
				'capability_kind_addon' => 'Add-on',
				'capability_kind_feature' => 'Función',
				'capability_pro'     => 'PRO',
				'open_extensions'    => 'Abrir Extensions',
				'open_settings'      => 'Abrir ajustes',
				'open_addons_page'   => 'Add-ons oficiales',
				'find_booking'       => 'Busco esa reserva (incluye borradores y estado ERROR).',
				'count_bookings'     => 'Cuento tus reservas.',
				'count_bookings_total' => 'Tienes %1$d reservas %2$s.',
				'count_bookings_by_status' => 'Por estado:',
				'count_bookings_excl_draft' => 'Los borradores están excluidos.',
				'count_bookings_excl_error' => 'Las reservas ERROR están excluidas.',
				'count_bookings_on_day' => 'el %s',
				'count_bookings_between' => 'del %1$s al %2$s',
				'count_bookings_until' => 'hasta el %s',
				'count_bookings_from' => 'desde el %s',
				'count_bookings_all_time' => 'en total',
				'open_calendar'      => 'Abrir calendario',
				'create_booking'     => 'Prepararé una nueva reserva. Revisa y confirma para guardar.',
				'create_bookings'    => 'Prepararé esas reservas. Revisa y confirma para guardar.',
				'update_booking'     => 'Prepararé el cambio de la reserva. Revisa y confirma para guardar.',
				'create_booking_summary' => 'Crear reserva:',
				'create_bookings_summary' => 'Crear %d reservas:',
				'update_booking_summary' => 'Actualizar reserva #%d:',
				'booking_current'    => 'Actual:',
				'booking_proposed'   => 'Propuesta:',
				'booking_dates'      => 'Fechas:',
				'booking_created'    => 'Reserva #%d creada.',
				'bookings_created'   => 'Creadas %d reservas: #%s.',
				'bookings_create_partial' => 'Algunas fechas fallaron: %s.',
				'booking_updated'    => 'Reserva #%d actualizada.',
				'ask_create_booking' => 'Para crear una reserva necesito fecha, hora, servicio y nombre o email del cliente.',
				'ask_create_bookings'=> 'Para varias reservas necesito hora, servicio, cliente y fechas o “próximos N lunes”.',
				'ask_update_booking_id' => '¿Qué reserva cambio? Indica el id (p. ej. #16) o pídeme buscarla primero.',
				'ask_update_booking_fields' => '¿Qué cambio en esa reserva — fecha, hora, servicio, cliente o estado?',
				'find_discount'      => 'Revisaré tus descuentos / cupones.',
				'found_discounts_one'=> 'Encontrado 1 descuento:',
				'found_discounts_many'=> 'Encontrados %d descuentos:',
				'no_discount_id'     => 'Ningún descuento con id %d.',
				'no_discounts'       => 'Ningún descuento. Prueba id, nombre o código — o pide la lista sin filtros.',
				'open_discount'      => 'Abrir descuento',
				'open_discounts'     => 'Abrir Descuentos',
				'discount_system_off'=> 'El sistema de descuentos está desactivado. Actívalo primero, luego abre Descuentos.',
				'discount_addon_missing' => 'El complemento Discount no está disponible en este sitio.',
				'find_customer'      => 'Busco ese cliente.',
				'found_customers_one'=> 'Encontrado 1 cliente:',
				'found_customers_many'=> 'Encontrados %d clientes:',
				'no_customer_id'     => 'Ningún cliente con id %d.',
				'no_customers'       => 'Ningún cliente. Prueba id, nombre, email o teléfono — o pide la lista sin filtros.',
				'open_customer'      => 'Abrir cliente',
				'open_customers'     => 'Abrir Clientes',
				'find_service'       => 'Revisaré tus servicios.',
				'found_services_one' => 'Encontrado 1 servicio:',
				'found_services_many'=> 'Encontrados %d servicios:',
				'no_service_id'      => 'Ningún servicio con id %d.',
				'no_services'        => 'Ningún servicio. Prueba id o nombre — o pide la lista sin filtros.',
				'open_service'       => 'Abrir servicio',
				'open_services'      => 'Abrir Servicios',
				'find_assistant'     => 'Revisaré tus asistentes.',
				'found_assistants_one'=> 'Encontrado 1 asistente:',
				'found_assistants_many'=> 'Encontrados %d asistentes:',
				'no_assistant_id'    => 'Ningún asistente con id %d.',
				'no_assistants'      => 'Ningún asistente. Prueba id o nombre — o pide la lista sin filtros.',
				'open_assistant'     => 'Abrir asistente',
				'open_assistants'    => 'Abrir Asistentes',
				'here_configure'     => 'Aquí puedes configurarlo:',
				'update_identity'    => 'Actualizo los datos del salón. Confirma la vista previa para aplicar.',
				'create_service'     => 'Creo/actualizo ese servicio. Confirma la vista previa para aplicar.',
				'create_assistant'   => 'Creo/actualizo ese asistente. Confirma la vista previa para aplicar.',
				'current_holidays'   => 'Estas son tus reglas de festivos actuales:',
				'ask_holiday_dates'  => '¿Qué fechas deben estar cerradas? Por ejemplo “25 de diciembre”, “del 10 al 20 de agosto” o “Navidad”.',
				'holiday_preview'    => 'De acuerdo — así entendí el cierre. Revisa y confirma para aplicar.',
				'clear_holidays'     => 'Eliminaré todas las reglas de festivos. Confirma la vista previa para aplicar.',
				'current_hours'      => 'Estos son tus horarios actuales:',
				'ask_closing'        => 'Claro — ¿qué hora de cierre uso? Por ejemplo 20:00.',
				'hours_preview'      => 'De acuerdo — así lo entendí. Revisa la vista previa y confirma para aplicar.',
				'ask_hours'          => 'Perfecto — abierto %s. ¿Qué horario? Puedes decir “9-18” o “9:00–18:00”.',
				'ask_days'           => 'Horario anotado. ¿Qué días? Por ejemplo “lunes a sábado” o “laborables”.',
				'none'               => '(ninguno)',
				'no_hours'           => 'Aún no hay horarios configurados.',
				'per_shop'           => 'Por local:',
				'chip_first_service' => 'Crea mi primer servicio: Corte, 30 minutos, 25€',
				'chip_payments'      => '¿Cómo acepto pagos online?',
				'chip_sms'           => '¿Cómo activo los recordatorios SMS?',
				'chip_discounts'     => '¿Cómo creo un código de descuento?',
				'chip_gcal'          => '¿Cómo conecto Google Calendar?',
				'chip_waitlist'      => '¿Cómo recupero las cancelaciones de última hora?',
				'chip_kiosk'         => '¿Los walk-in pueden reservar desde una tablet en el salón?',
				'chip_hours'         => 'Abro de lunes a sábado de 9 a 18',
				'chip_holidays'      => 'Cerrado el 25 de diciembre',
				'chip_booking'       => 'Crea una reserva para Mario Rossi, Corte, mañana a las 10:00',
				'chip_find'          => 'Busca la reserva #16',
				'attendance_not_supported' => 'Todavía no puedo actualizar el estado de asistencia/no-show, ni siquiera en bloque. Puedes marcar cada reserva como no-show desde la lista de Reservas o el calendario: %s',
				'booking_need_fields' => 'Para crear la reserva también necesito: %s. ¿Me lo puedes facilitar?',
				'field_first_name'   => 'el nombre del cliente',
				'field_last_name'    => 'el apellido del cliente',
				'field_email'        => 'el correo electrónico del cliente',
				'field_phone'        => 'el móvil del cliente',
			),
			'fr' => array(
				'welcome_page'       => 'Bonjour — je peux configurer presque tous les réglages non secrets de Salon : horaires, jours fériés, identité, règles de réservation, notifications, comportement SMS/paiements (sans clés), Google Calendar (si connecté), pages, services/assistants/ressources/réductions, style, etc. Je propose un aperçu avant d’enregistrer. Pour les clés API, OAuth ou licence, je vous oriente vers Réglages.',
				'welcome_widget'     => 'Bonjour — demandez-moi de modifier les réglages (horaires, notifications, paiements, pages…), de créer ou mettre à jour services/assistants/ressources/réductions, ou tout autre réglage non secret. Aperçu avant enregistrement.',
				'welcome_multishop'  => 'Multi-shop actif — précisez le salon pour les horaires, jours fériés, identité ou le diagnostic de disponibilité (ex. « pour le salon Centre »).',
				'guidance_lead'      => 'Voici ce que j’ai trouvé :',
				'changelog_lead'     => 'Voici les nouveautés des versions récentes de Salon Booking System%1$s :',
				'changelog_more'     => 'Changelog public complet : %1$s',
				'confirm_lead'       => 'J’ai préparé une modification d’après votre message. Vérifiez et confirmez.',
				'found_bookings_one' => '1 réservation trouvée :',
				'found_bookings_many'=> '%d réservations trouvées :',
				'no_booking_id'      => 'Aucune réservation avec l’id %d (brouillons et ERROR inclus).',
				'no_bookings'        => 'Aucune réservation. Essayez id, nom, e-mail ou téléphone — brouillons et ERROR inclus.',
				'bookings_include'   => 'Cette recherche inclut les brouillons et le statut ERROR.',
				'open_booking'       => 'Ouvrir la réservation',
				'no_date'            => '(sans date)',
				'status_draft'       => 'Brouillon',
				'empty_prompt'       => 'Que souhaitez-vous configurer ? Horaires, jours fériés, notifications, paiements, pages, services, assistants — ou où coller les clés API.',
				'shop_got_it'        => 'Parfait — j’utilise ce salon. Vérifiez l’aperçu.',
				'check_details'      => 'Je vérifie avec les détails fournis.',
				'unavailable_need_more' => 'Pouvez-vous préciser un peu — par exemple la date, l’heure et le service — pour que je vérifie correctement ?',
				'unavailable_ok_subject' => 'J’ai vérifié %s et rien dans vos règles actuelles ne le bloque clairement.',
				'unavailable_ok'     => 'Avec les détails fournis, rien dans vos règles actuelles ne bloque clairement cela.',
				'unavailable_refresh'=> 'Si les clients ne le voient toujours pas, actualisez la page ou enregistrez les Réglages une fois pour vider le cache des réservations.',
				'unavailable_why_one'=> 'Voici pourquoi %1$s n’est pas disponible : %2$s',
				'unavailable_why_one_bare' => 'Voici pourquoi ce n’est pas disponible : %s',
				'unavailable_why_two'=> 'Voici pourquoi %1$s n’est pas disponible. %2$s Aussi, %3$s',
				'unavailable_why_two_bare' => 'Voici pourquoi ce n’est pas disponible. %1$s Aussi, %2$s',
				'unavailable_why_many' => 'Voici pourquoi %s n’est pas disponible :',
				'unavailable_why_many_bare' => 'Voici pourquoi ce n’est pas disponible :',
				'unavailable_also_share' => 'Pour confirmer, indiquez aussi : %s.',
				'unavailable_subject_with' => '%1$s le %2$s avec %3$s',
				'unavailable_subject_on' => '%1$s le %2$s',
				'unavailable_when_at'=> 'j F Y \\à H:i',
				'unavailable_engine_generic' => 'Le moteur de réservation refuse ce créneau (capacité, durée ou conflit).',
				'unavailable_capacity_overlap_lead' => 'Impossible de commencer à %1$s car pendant ce rendez-vous la capacité est déjà complète à %2$s.',
				'unavailable_capacity_at' => 'La capacité est déjà complète à %s.',
				'setting_units_per_session' => 'Units per session',
				'setting_customers_per_session' => 'Customers per session',
				'setting_multiple_customers' => 'Multiple Customers per Session',
				'unavailable_cap_setting_customers' => 'Déterminé par Réglages → Booking → « %1$s » (actuellement %2$d). Augmentez-le si le salon peut accepter plus de réservations qui se chevauchent.',
				'unavailable_cap_setting_units' => 'Déterminé par le réglage « %2$s » du service%1$s (actuellement %3$d) : capacité simultanée de ce service. Ouvrez le service pour l’augmenter si plusieurs clients peuvent réserver le même créneau.',
				'unavailable_cap_setting_assistant_off' => 'Déterminé par l’assistant%1$s : « %2$s » est désactivé, une seule réservation l’occupe donc pour toute la durée. Activez-le seulement s’il peut servir plusieurs clients en même temps.',
				'unavailable_cap_setting_assistant_on' => 'L’assistant%1$s a « %2$s » activé, la limite est donc « %3$s » (actuellement %4$d) sur le service / réglages booking — ce nombre de réservations qui se chevauchent remplit déjà le créneau.',
				'unavailable_cap_setting_units_short' => 'Service « %1$s » = %2$d',
				'unavailable_cap_setting_customers_short' => 'Salon « %1$s » = %2$d',
				'unavailable_cap_setting_multi_short' => 'Assistant « %1$s » = %2$s',
				'unavailable_cap_setting_generic' => 'Réglages de capacité pertinents : %s.',
				'unavailable_full_means' => '« Complet » signifie que le nombre maximum de réservations qui se chevauchent pour ce service (ou assistant) est déjà atteint sur une partie de la durée du rendez-vous. Cette limite vient de « Units per session » (service), « Customers per session » (Réglages → Booking) et/ou « Multiple Customers per Session » (assistant).',
				'unavailable_full_settings_intro' => 'Réglages qui le déterminent :',
				'unavailable_full_setting_units_line' => '« %1$s » sur le service%2$s → actuellement %3$d (réservations simultanées permises pour ce service).',
				'unavailable_full_setting_customers_line' => '« %1$s » dans Réglages → Booking → actuellement %2$d (réservations qui se chevauchent permises au niveau du salon).',
				'unavailable_full_setting_multi_line' => '« %1$s » sur l’assistant%2$s → %3$s. Off = une réservation remplit l’assistant ; On = la limite Units/Customers per session s’applique.',
				'unavailable_full_hint_units' => 'Ici le blocage vient de « Units per session » du service. Augmentez-le dans la fiche du service si plusieurs clients peuvent faire ce service ensemble.',
				'unavailable_full_hint_customers' => 'Ici le blocage vient de « Customers per session » du salon (Réglages → Booking).',
				'unavailable_full_hint_assistant_off' => 'Ici le blocage vient de l’assistant : « Multiple Customers per Session » est désactivé, il est donc exclusif sur ce créneau.',
				'unavailable_full_hint_assistant_on' => 'Ici l’assistant accepte plusieurs clients, mais la limite Units/Customers per session est déjà atteinte.',
				'open_customers_per_session' => 'Ouvrir Customers per session',
				'open_units_per_session' => 'Ouvrir Units per session (service)',
				'open_multiple_customers' => 'Ouvrir Multiple Customers per Session (assistant)',
				'on' => 'activé',
				'off' => 'désactivé',
				'unavailable_full_check_calendar' => 'Vérifiez le calendrier autour de %s pour des réservations qui chevauchent ce créneau. Vous pouvez libérer de la capacité en déplaçant/annulant une réservation, ou augmenter les unités/heure du service si plusieurs clients peuvent être servis en parallèle.',
				'unavailable_full_check_calendar_bare' => 'Vérifiez le calendrier pour des réservations qui se chevauchent, ou augmentez les unités/heure du service si plusieurs clients peuvent être servis en parallèle.',
				'fallback_help'      => 'Dites-moi quoi configurer — horaires, jours fériés, notifications, paiements, pages, services/assistants — ou demandez où coller les clés API paiement/SMS/OAuth. Je peux aussi suggérer des fonctionnalités ou add-ons (waitlist, kiosk, multi-shop…).',
				'capability_lead'    => 'Je vous indique la fonctionnalité ou l’add-on le plus adapté.',
				'capability_suggest' => 'D’après votre demande, ces fonctionnalités ou add-ons peuvent aider :',
				'capability_browse'  => 'Voici des fonctionnalités et add-ons pertinents de Salon Booking System :',
				'capability_none'    => 'Pas de correspondance claire. Nommez l’objectif (ex. waitlist, kiosk, paiements, multi-shop) ou ouvrez Extensions.',
				'capability_kind_addon' => 'Add-on',
				'capability_kind_feature' => 'Fonctionnalité',
				'capability_pro'     => 'PRO',
				'open_extensions'    => 'Ouvrir Extensions',
				'open_settings'      => 'Ouvrir les réglages',
				'open_addons_page'   => 'Add-ons officiels',
				'find_booking'       => 'Je cherche cette réservation (y compris brouillons et statut ERROR).',
				'count_bookings'     => 'Je compte vos réservations.',
				'count_bookings_total' => 'Vous avez %1$d réservations %2$s.',
				'count_bookings_by_status' => 'Par statut :',
				'count_bookings_excl_draft' => 'Les brouillons sont exclus.',
				'count_bookings_excl_error' => 'Les réservations ERROR sont exclues.',
				'count_bookings_on_day' => 'le %s',
				'count_bookings_between' => 'du %1$s au %2$s',
				'count_bookings_until' => 'jusqu’au %s',
				'count_bookings_from' => 'à partir du %s',
				'count_bookings_all_time' => 'au total',
				'open_calendar'      => 'Ouvrir le calendrier',
				'create_booking'     => 'Je prépare une nouvelle réservation. Vérifiez et confirmez pour enregistrer.',
				'create_bookings'    => 'Je prépare ces réservations. Vérifiez et confirmez pour enregistrer.',
				'update_booking'     => 'Je prépare la modification de la réservation. Vérifiez et confirmez pour enregistrer.',
				'create_booking_summary' => 'Créer une réservation :',
				'create_bookings_summary' => 'Créer %d réservations :',
				'update_booking_summary' => 'Mettre à jour la réservation #%d :',
				'booking_current'    => 'Actuel :',
				'booking_proposed'   => 'Proposé :',
				'booking_dates'      => 'Dates :',
				'booking_created'    => 'Réservation #%d créée.',
				'bookings_created'   => '%d réservations créées : #%s.',
				'bookings_create_partial' => 'Certaines dates ont échoué : %s.',
				'booking_updated'    => 'Réservation #%d mise à jour.',
				'ask_create_booking' => 'Pour créer une réservation j’ai besoin de la date, l’heure, le service et le nom ou e-mail du client.',
				'ask_create_bookings'=> 'Pour plusieurs réservations j’ai besoin de l’heure, du service, du client et des dates ou « prochains N lundis ».',
				'ask_update_booking_id' => 'Quelle réservation modifier ? Indiquez l’id (ex. #16) ou demandez-moi de la trouver d’abord.',
				'ask_update_booking_fields' => 'Que dois-je modifier — date, heure, service, client ou statut ?',
				'find_discount'      => 'Je vérifie vos réductions / codes promo.',
				'found_discounts_one'=> '1 réduction trouvée :',
				'found_discounts_many'=> '%d réductions trouvées :',
				'no_discount_id'     => 'Aucune réduction avec l’id %d.',
				'no_discounts'       => 'Aucune réduction. Essayez id, nom ou code — ou demandez la liste sans filtre.',
				'open_discount'      => 'Ouvrir la réduction',
				'open_discounts'     => 'Ouvrir Réductions',
				'discount_system_off'=> 'Le système de réductions est désactivé. Activez-le d’abord, puis ouvrez Réductions.',
				'discount_addon_missing' => 'L’extension Discount n’est pas disponible sur ce site.',
				'find_customer'      => 'Je cherche ce client.',
				'found_customers_one'=> '1 client trouvé :',
				'found_customers_many'=> '%d clients trouvés :',
				'no_customer_id'     => 'Aucun client avec l’id %d.',
				'no_customers'       => 'Aucun client. Essayez id, nom, e-mail ou téléphone — ou la liste sans filtre.',
				'open_customer'      => 'Ouvrir le client',
				'open_customers'     => 'Ouvrir Clients',
				'find_service'       => 'Je vérifie vos services.',
				'found_services_one' => '1 service trouvé :',
				'found_services_many'=> '%d services trouvés :',
				'no_service_id'      => 'Aucun service avec l’id %d.',
				'no_services'        => 'Aucun service. Essayez id ou nom — ou la liste sans filtre.',
				'open_service'       => 'Ouvrir le service',
				'open_services'      => 'Ouvrir Services',
				'find_assistant'     => 'Je vérifie vos assistants.',
				'found_assistants_one'=> '1 assistant trouvé :',
				'found_assistants_many'=> '%d assistants trouvés :',
				'no_assistant_id'    => 'Aucun assistant avec l’id %d.',
				'no_assistants'      => 'Aucun assistant. Essayez id ou nom — ou la liste sans filtre.',
				'open_assistant'     => 'Ouvrir l’assistant',
				'open_assistants'    => 'Ouvrir Assistants',
				'here_configure'     => 'Voici où le configurer :',
				'update_identity'    => 'Je mets à jour l’identité du salon. Confirmez l’aperçu pour appliquer.',
				'create_service'     => 'Je crée/mets à jour ce service. Confirmez l’aperçu pour appliquer.',
				'create_assistant'   => 'Je crée/mets à jour cet assistant. Confirmez l’aperçu pour appliquer.',
				'current_holidays'   => 'Voici vos règles de fermeture actuelles :',
				'ask_holiday_dates'  => 'Quelles dates doivent être fermées ? Par exemple « 25 décembre », « du 10 au 20 août » ou « Noël ».',
				'holiday_preview'    => 'D’accord — voici la fermeture comprise. Vérifiez et confirmez pour appliquer.',
				'clear_holidays'     => 'Je vais supprimer toutes les fermetures. Confirmez l’aperçu pour appliquer.',
				'current_hours'      => 'Voici vos horaires d’ouverture actuels :',
				'ask_closing'        => 'Bien sûr — quelle heure de fermeture ? Par exemple 20:00.',
				'hours_preview'      => 'D’accord — voici ce que j’ai compris. Vérifiez l’aperçu et confirmez.',
				'ask_hours'          => 'Parfait — ouvert %s. Quels horaires ? Vous pouvez dire « 9-18 » ou « 9:00–18:00 ».',
				'ask_days'           => 'Horaires notés. Quels jours ? Par exemple « lundi à samedi » ou « jours ouvrés ».',
				'none'               => '(aucun)',
				'no_hours'           => 'Aucun horaire configuré pour le moment.',
				'per_shop'           => 'Par salon :',
				'chip_first_service' => 'Créer mon premier service : Coupe, 30 minutes, 25€',
				'chip_payments'      => 'Comment accepter les paiements en ligne ?',
				'chip_sms'           => 'Comment activer les rappels SMS ?',
				'chip_discounts'     => 'Comment créer un code de réduction ?',
				'chip_gcal'          => 'Comment connecter Google Calendar ?',
				'chip_waitlist'      => 'Comment récupérer les annulations de dernière minute ?',
				'chip_kiosk'         => 'Les walk-ins peuvent-ils réserver depuis une tablette au salon ?',
				'chip_hours'         => 'Ouvert du lundi au samedi de 9h à 18h',
				'chip_holidays'      => 'Fermé le 25 décembre',
				'chip_booking'       => 'Créer une réservation pour Mario Rossi, Coupe, demain à 10:00',
				'chip_find'          => 'Trouver la réservation #16',
				'attendance_not_supported' => 'Je ne peux pas encore mettre à jour le statut de présence/no-show, même en masse. Vous pouvez marquer chaque réservation comme no-show depuis la liste des Réservations ou le calendrier : %s',
				'booking_need_fields' => 'Pour créer la réservation il me faut aussi : %s. Pouvez-vous me le fournir ?',
				'field_first_name'   => 'le prénom du client',
				'field_last_name'    => 'le nom du client',
				'field_email'        => 'l’adresse e-mail du client',
				'field_phone'        => 'le portable du client',
			),
			'de' => array(
				'welcome_page'       => 'Hallo — ich kann fast alle nicht geheimen Salon-Einstellungen konfigurieren: Öffnungszeiten, Feiertage, Identität, Buchungsregeln, Benachrichtigungen, SMS-/Zahlungsverhalten (ohne Keys), Google Calendar (falls verbunden), Seiten, Services/Assistenten/Ressourcen/Rabatte, Stil u. a. Vorschau vor dem Speichern. Für API-Keys, OAuth oder Lizenz zeige ich den Einstellungsbildschirm.',
				'welcome_widget'     => 'Hallo — bitten Sie mich, Einstellungen zu ändern (Zeiten, Benachrichtigungen, Zahlungen, Seiten…), Services/Assistenten/Ressourcen/Rabatte zu erstellen oder zu aktualisieren oder andere nicht geheime Einstellungen. Vorschau vor dem Speichern.',
				'welcome_multishop'  => 'Multi-Shop aktiv — nennen Sie den Standort bei Öffnungszeiten, Feiertagen, Identität oder Verfügbarkeitsfragen (z. B. „für Shop Zentrum“).',
				'guidance_lead'      => 'Das habe ich gefunden:',
				'changelog_lead'     => 'Das ist neu in den letzten Versionen von Salon Booking System%1$s:',
				'changelog_more'     => 'Vollständiges öffentliches Changelog: %1$s',
				'confirm_lead'       => 'Ich habe eine Änderung vorbereitet. Bitte prüfen und bestätigen.',
				'found_bookings_one' => '1 Buchung gefunden:',
				'found_bookings_many'=> '%d Buchungen gefunden:',
				'no_booking_id'      => 'Keine Buchung mit id %d (Entwürfe und ERROR eingeschlossen).',
				'no_bookings'        => 'Keine Buchungen. Versuchen Sie id, Name, E-Mail oder Telefon — Entwürfe und ERROR sind eingeschlossen.',
				'bookings_include'   => 'Diese Suche schließt Entwürfe und ERROR ein.',
				'open_booking'       => 'Buchung öffnen',
				'no_date'            => '(kein Datum)',
				'status_draft'       => 'Entwurf',
				'empty_prompt'       => 'Was möchten Sie einrichten? Öffnungszeiten, Feiertage, Benachrichtigungen, Zahlungen, Seiten, Services, Assistenten — oder wo API-Keys einfügen.',
				'shop_got_it'        => 'Alles klar — ich nutze diesen Standort. Bitte Vorschau prüfen.',
				'check_details'      => 'Ich prüfe das mit den Angaben, die Sie gemacht haben.',
				'unavailable_need_more' => 'Können Sie etwas mehr angeben — z. B. Datum, Uhrzeit und Service — damit ich es richtig prüfen kann?',
				'unavailable_ok_subject' => 'Ich habe %s geprüft und nach den aktuellen Regeln ist nichts klar blockiert.',
				'unavailable_ok'     => 'Mit den Angaben ist nach den aktuellen Regeln nichts klar blockiert.',
				'unavailable_refresh'=> 'Wenn Kunden es im Formular noch nicht sehen, Seite neu laden oder Einstellungen einmal speichern, um den Buchungs-Cache zu leeren.',
				'unavailable_why_one'=> 'Deshalb ist %1$s nicht verfügbar: %2$s',
				'unavailable_why_one_bare' => 'Deshalb ist das nicht verfügbar: %s',
				'unavailable_why_two'=> 'Deshalb ist %1$s nicht verfügbar. %2$s Außerdem %3$s',
				'unavailable_why_two_bare' => 'Deshalb ist das nicht verfügbar. %1$s Außerdem %2$s',
				'unavailable_why_many' => 'Deshalb ist %s nicht verfügbar:',
				'unavailable_why_many_bare' => 'Deshalb ist das nicht verfügbar:',
				'unavailable_also_share' => 'Zur Bestätigung bitte auch angeben: %s.',
				'unavailable_subject_with' => '%1$s am %2$s mit %3$s',
				'unavailable_subject_on' => '%1$s am %2$s',
				'unavailable_when_at'=> 'j F Y \\u\\m H:i',
				'unavailable_engine_generic' => 'Die Buchungs-Engine lehnt diesen Slot ab (Kapazität, Dauer oder Konflikt).',
				'unavailable_capacity_overlap_lead' => 'Start um %1$s ist nicht möglich, weil während des Termins die Kapazität um %2$s bereits voll ist.',
				'unavailable_capacity_at' => 'Die Kapazität ist um %s bereits voll.',
				'setting_units_per_session' => 'Units per session',
				'setting_customers_per_session' => 'Customers per session',
				'setting_multiple_customers' => 'Multiple Customers per Session',
				'unavailable_cap_setting_customers' => 'Bestimmt durch Einstellungen → Booking → „%1$s“ (aktuell %2$d). Erhöhen Sie den Wert, wenn der Salon mehr überlappende Buchungen annehmen kann.',
				'unavailable_cap_setting_units' => 'Bestimmt durch die Einstellung „%2$s“ des Services%1$s (aktuell %3$d): gleichzeitige Kapazität dieses Services. Öffnen Sie den Service, um sie zu erhöhen, wenn mehrere Kunden denselben Slot buchen können.',
				'unavailable_cap_setting_assistant_off' => 'Bestimmt durch den Assistenten%1$s: „%2$s“ ist deaktiviert, eine einzige Buchung belegt ihn also für die gesamte Dauer. Aktivieren Sie es nur, wenn er mehrere Kunden gleichzeitig bedienen kann.',
				'unavailable_cap_setting_assistant_on' => 'Der Assistent%1$s hat „%2$s“ aktiviert, das Limit ist also „%3$s“ (aktuell %4$d) am Service / in den Booking-Einstellungen — diese Zahl überlappender Buchungen füllt den Slot bereits.',
				'unavailable_cap_setting_units_short' => 'Service „%1$s“ = %2$d',
				'unavailable_cap_setting_customers_short' => 'Salon „%1$s“ = %2$d',
				'unavailable_cap_setting_multi_short' => 'Assistent „%1$s“ = %2$s',
				'unavailable_cap_setting_generic' => 'Relevante Kapazitätseinstellungen: %s.',
				'unavailable_full_means' => '„Voll / ausgebucht“ bedeutet, dass die maximal erlaubte Zahl überlappender Buchungen in einem Teil der Termindauer bereits erreicht ist. Dieses Limit kommt von „Units per session“ (Service), „Customers per session“ (Einstellungen → Booking) und/oder „Multiple Customers per Session“ (Assistent).',
				'unavailable_full_settings_intro' => 'Einstellungen, die das bestimmen:',
				'unavailable_full_setting_units_line' => '„%1$s“ am Service%2$s → aktuell %3$d (erlaubte gleichzeitige Buchungen für diesen Service).',
				'unavailable_full_setting_customers_line' => '„%1$s“ in Einstellungen → Booking → aktuell %2$d (erlaubte überlappende Buchungen auf Salon-Ebene).',
				'unavailable_full_setting_multi_line' => '„%1$s“ am Assistenten%2$s → %3$s. Off = eine Buchung belegt den Assistenten; On = das Limit Units/Customers per session gilt.',
				'unavailable_full_hint_units' => 'In diesem Fall blockiert „Units per session“ des Services. Erhöhen Sie den Wert im Service, wenn mehrere Kunden diesen Service gleichzeitig buchen können.',
				'unavailable_full_hint_customers' => 'In diesem Fall blockiert „Customers per session“ des Salons (Einstellungen → Booking).',
				'unavailable_full_hint_assistant_off' => 'In diesem Fall blockiert der Assistent: „Multiple Customers per Session“ ist deaktiviert, er ist für diesen Slot also exklusiv.',
				'unavailable_full_hint_assistant_on' => 'In diesem Fall nimmt der Assistent mehrere Kunden an, aber das Limit Units/Customers per session ist bereits erreicht.',
				'open_customers_per_session' => 'Customers per session öffnen',
				'open_units_per_session' => 'Units per session öffnen (Service)',
				'open_multiple_customers' => 'Multiple Customers per Session öffnen (Assistent)',
				'on' => 'aktiviert',
				'off' => 'deaktiviert',
				'unavailable_full_check_calendar' => 'Prüfen Sie den Kalender um %s auf überlappende Buchungen. Kapazität schaffen Sie durch Verschieben/Stornieren, oder erhöhen Sie die Einheiten/Stunde, wenn parallel mehr Kunden bedient werden können.',
				'unavailable_full_check_calendar_bare' => 'Prüfen Sie den Kalender auf überlappende Buchungen, oder erhöhen Sie die Einheiten/Stunde des Services, wenn parallel mehr Kunden bedient werden können.',
				'fallback_help'      => 'Sagen Sie mir, was konfiguriert werden soll — Öffnungszeiten, Feiertage, Benachrichtigungen, Zahlungen, Seiten, Services/Assistenten — oder fragen Sie, wo API-Keys für Zahlung/SMS/OAuth eingefügt werden. Ich kann auch Funktionen oder Add-ons vorschlagen (Waitlist, Kiosk, Multi-Shop…).',
				'capability_lead'    => 'Ich zeige Ihnen die passende Funktion oder das passende Add-on.',
				'capability_suggest' => 'Basierend auf Ihrer Frage können diese Funktionen oder Add-ons helfen:',
				'capability_browse'  => 'Hier sind relevante Funktionen und Add-ons von Salon Booking System:',
				'capability_none'    => 'Keine klare Übereinstimmung gefunden. Nennen Sie das Ziel (z. B. Waitlist, Kiosk, Zahlungen, Multi-Shop) oder öffnen Sie Extensions.',
				'capability_kind_addon' => 'Add-on',
				'capability_kind_feature' => 'Funktion',
				'capability_pro'     => 'PRO',
				'open_extensions'    => 'Extensions öffnen',
				'open_settings'      => 'Einstellungen öffnen',
				'open_addons_page'   => 'Offizielle Add-ons',
				'find_booking'       => 'Ich suche diese Buchung (inkl. Entwürfe und ERROR-Status).',
				'count_bookings'     => 'Ich zähle Ihre Buchungen.',
				'count_bookings_total' => 'Sie haben %1$d Buchungen %2$s.',
				'count_bookings_by_status' => 'Nach Status:',
				'count_bookings_excl_draft' => 'Entwürfe sind ausgeschlossen.',
				'count_bookings_excl_error' => 'ERROR-Buchungen sind ausgeschlossen.',
				'count_bookings_on_day' => 'am %s',
				'count_bookings_between' => 'vom %1$s bis %2$s',
				'count_bookings_until' => 'bis %s',
				'count_bookings_from' => 'ab %s',
				'count_bookings_all_time' => 'insgesamt',
				'open_calendar'      => 'Kalender öffnen',
				'create_booking'     => 'Ich bereite eine neue Buchung vor. Bitte prüfen und bestätigen.',
				'create_bookings'    => 'Ich bereite diese Buchungen vor. Bitte prüfen und bestätigen.',
				'update_booking'     => 'Ich bereite die Buchungsänderung vor. Bitte prüfen und bestätigen.',
				'create_booking_summary' => 'Buchung erstellen:',
				'create_bookings_summary' => '%d Buchungen erstellen:',
				'update_booking_summary' => 'Buchung #%d aktualisieren:',
				'booking_current'    => 'Aktuell:',
				'booking_proposed'   => 'Vorschlag:',
				'booking_dates'      => 'Daten:',
				'booking_created'    => 'Buchung #%d erstellt.',
				'bookings_created'   => '%d Buchungen erstellt: #%s.',
				'bookings_create_partial' => 'Einige Daten fehlgeschlagen: %s.',
				'booking_updated'    => 'Buchung #%d aktualisiert.',
				'ask_create_booking' => 'Für eine Buchung brauche ich Datum, Uhrzeit, Dienstleistung und Kundenname oder E-Mail.',
				'ask_create_bookings'=> 'Für mehrere Buchungen brauche ich Uhrzeit, Service, Kunde und Daten oder „nächste N Montage“.',
				'ask_update_booking_id' => 'Welche Buchung ändern? Nennen Sie die Id (z. B. #16) oder lassen Sie sie zuerst suchen.',
				'ask_update_booking_fields' => 'Was soll ich ändern — Datum, Zeit, Service, Kunde oder Status?',
				'find_discount'      => 'Ich prüfe Ihre Rabatte / Gutscheine.',
				'found_discounts_one'=> '1 Rabatt gefunden:',
				'found_discounts_many'=> '%d Rabatte gefunden:',
				'no_discount_id'     => 'Kein Rabatt mit id %d.',
				'no_discounts'       => 'Keine Rabatte. Versuchen Sie id, Name oder Code — oder die Liste ohne Filter.',
				'open_discount'      => 'Rabatt öffnen',
				'open_discounts'     => 'Rabatte öffnen',
				'discount_system_off'=> 'Das Rabattsystem ist deaktiviert. Aktivieren Sie es zuerst, dann öffnen Sie Rabatte.',
				'discount_addon_missing' => 'Das Discount-Add-on ist auf dieser Website nicht verfügbar.',
				'find_customer'      => 'Ich suche diesen Kunden.',
				'found_customers_one'=> '1 Kunde gefunden:',
				'found_customers_many'=> '%d Kunden gefunden:',
				'no_customer_id'     => 'Kein Kunde mit id %d.',
				'no_customers'       => 'Keine Kunden. Versuchen Sie id, Name, E-Mail oder Telefon — oder die Liste ohne Filter.',
				'open_customer'      => 'Kunde öffnen',
				'open_customers'     => 'Kunden öffnen',
				'find_service'       => 'Ich prüfe Ihre Services.',
				'found_services_one' => '1 Service gefunden:',
				'found_services_many'=> '%d Services gefunden:',
				'no_service_id'      => 'Kein Service mit id %d.',
				'no_services'        => 'Keine Services. Versuchen Sie id oder Name — oder die Liste ohne Filter.',
				'open_service'       => 'Service öffnen',
				'open_services'      => 'Services öffnen',
				'find_assistant'     => 'Ich prüfe Ihre Assistenten.',
				'found_assistants_one'=> '1 Assistent gefunden:',
				'found_assistants_many'=> '%d Assistenten gefunden:',
				'no_assistant_id'    => 'Kein Assistent mit id %d.',
				'no_assistants'      => 'Keine Assistenten. Versuchen Sie id oder Name — oder die Liste ohne Filter.',
				'open_assistant'     => 'Assistent öffnen',
				'open_assistants'    => 'Assistenten öffnen',
				'here_configure'     => 'So konfigurieren Sie das:',
				'update_identity'    => 'Ich aktualisiere die Salon-Daten. Vorschau bestätigen zum Anwenden.',
				'create_service'     => 'Ich erstelle/aktualisiere diesen Service. Vorschau bestätigen zum Anwenden.',
				'create_assistant'   => 'Ich erstelle/aktualisiere diesen Assistenten. Vorschau bestätigen zum Anwenden.',
				'current_holidays'   => 'Ihre aktuellen Feiertagsregeln:',
				'ask_holiday_dates'  => 'Welche Termine sollen geschlossen sein? Zum Beispiel „25. Dezember“, „vom 10. bis 20. August“ oder „Weihnachten“.',
				'holiday_preview'    => 'Verstanden — hier die Schließung. Prüfen und bestätigen zum Anwenden.',
				'clear_holidays'     => 'Ich entferne alle Feiertagsregeln. Vorschau bestätigen zum Anwenden.',
				'current_hours'      => 'Ihre aktuellen Öffnungszeiten:',
				'ask_closing'        => 'Klar — welche Schließzeit? Zum Beispiel 20:00.',
				'hours_preview'      => 'Verstanden — bitte Vorschau prüfen und bestätigen.',
				'ask_hours'          => 'Perfekt — geöffnet %s. Welche Zeiten? z. B. „9-18“ oder „9:00–18:00“.',
				'ask_days'           => 'Zeiten notiert. Welche Tage? z. B. „Montag bis Samstag“ oder „Werktage“.',
				'none'               => '(keine)',
				'no_hours'           => 'Noch keine Öffnungszeiten konfiguriert.',
				'per_shop'           => 'Pro Standort:',
				'chip_first_service' => 'Meinen ersten Service anlegen: Haarschnitt, 30 Minuten, 25€',
				'chip_payments'      => 'Wie akzeptiere ich Online-Zahlungen?',
				'chip_sms'           => 'Wie aktiviere ich SMS-Erinnerungen?',
				'chip_discounts'     => 'Wie erstelle ich einen Rabattcode?',
				'chip_gcal'          => 'Wie verbinde ich Google Calendar?',
				'chip_waitlist'      => 'Wie gewinne ich Last-Minute-Stornierungen zurück?',
				'chip_kiosk'         => 'Können Walk-ins über ein Tablet im Salon buchen?',
				'chip_hours'         => 'Geöffnet Montag bis Samstag 9-18 Uhr',
				'chip_holidays'      => 'Geschlossen am 25. Dezember',
				'chip_booking'       => 'Buchung für Mario Rossi anlegen, Haarschnitt, morgen um 10:00',
				'chip_find'          => 'Buchung #16 finden',
				'attendance_not_supported' => 'Ich kann den Anwesenheits-/No-Show-Status noch nicht ändern, auch nicht in Massen. Sie können jede Buchung in der Buchungsliste oder im Kalender als No-Show markieren: %s',
				'booking_need_fields' => 'Um die Buchung anzulegen, benötige ich noch: %s. Können Sie mir das geben?',
				'field_first_name'   => 'den Vornamen des Kunden',
				'field_last_name'    => 'den Nachnamen des Kunden',
				'field_email'        => 'die E-Mail-Adresse des Kunden',
				'field_phone'        => 'die Handynummer des Kunden',
			),
			'pt' => array(
				'welcome_page'       => 'Olá — posso configurar quase todos os ajustes não secretos do Salon: horários, feriados, identidade, regras de reserva, notificações, comportamento de SMS/pagamentos (sem chaves), Google Calendar (se conectado), páginas, serviços/assistentes/recursos/descontos, estilo e mais. Mostro uma prévia antes de salvar. Para API keys, OAuth ou licença, indico a tela de Configurações.',
				'welcome_widget'     => 'Olá — peça para alterar configurações (horários, notificações, pagamentos, páginas…), criar ou atualizar serviços/assistentes/recursos/descontos, ou qualquer outro ajuste não secreto. Mostro uma prévia antes de salvar.',
				'welcome_multishop'  => 'Multi-shop ativo — indique a unidade ao alterar horários, feriados, identidade ou ao diagnosticar disponibilidade (ex.: “para a loja Centro”).',
				'guidance_lead'      => 'Isto é o que encontrei:',
				'changelog_lead'     => 'Estas são as novidades nas versões recentes do Salon Booking System%1$s:',
				'changelog_more'     => 'Changelog público completo: %1$s',
				'confirm_lead'       => 'Preparei uma alteração com base no que você disse. Revise e confirme.',
				'found_bookings_one' => '1 reserva encontrada:',
				'found_bookings_many'=> '%d reservas encontradas:',
				'no_booking_id'      => 'Nenhuma reserva com id %d (inclui rascunhos e ERROR).',
				'no_bookings'        => 'Nenhuma reserva. Tente id, nome, e-mail ou telefone — rascunhos e ERROR incluídos.',
				'bookings_include'   => 'Esta busca inclui rascunhos e status ERROR.',
				'open_booking'       => 'Abrir reserva',
				'no_date'            => '(sem data)',
				'status_draft'       => 'Rascunho',
				'empty_prompt'       => 'O que deseja configurar? Horários, feriados, notificações, pagamentos, páginas, serviços, assistentes — ou onde colar as API keys.',
				'shop_got_it'        => 'Certo — uso esse salão. Revise a prévia.',
				'check_details'      => 'Vou verificar com os detalhes que você passou.',
				'unavailable_need_more' => 'Pode dar mais detalhes — por exemplo data, hora e serviço — para eu verificar bem?',
				'unavailable_ok_subject' => 'Verifiquei %s e com as regras atuais nada o bloqueia claramente.',
				'unavailable_ok'     => 'Com os detalhes que deu, as regras atuais não bloqueiam isto claramente.',
				'unavailable_refresh'=> 'Se os clientes ainda não o veem no formulário, atualize a página ou grave as Definições uma vez para limpar a cache de reservas.',
				'unavailable_why_one'=> 'Por isto %1$s não está disponível: %2$s',
				'unavailable_why_one_bare' => 'Por isto não está disponível: %s',
				'unavailable_why_two'=> 'Por isto %1$s não está disponível. %2$s Além disso, %3$s',
				'unavailable_why_two_bare' => 'Por isto não está disponível. %1$s Além disso, %2$s',
				'unavailable_why_many' => 'Por isto %s não está disponível:',
				'unavailable_why_many_bare' => 'Por isto não está disponível:',
				'unavailable_also_share' => 'Para confirmar melhor, indique também: %s.',
				'unavailable_subject_with' => '%1$s em %2$s com %3$s',
				'unavailable_subject_on' => '%1$s em %2$s',
				'unavailable_when_at'=> 'j F Y \\à\\s H:i',
				'unavailable_engine_generic' => 'O motor de reservas rejeita este horário (capacidade, duração ou conflito).',
				'unavailable_capacity_overlap_lead' => 'Não é possível começar às %1$s porque durante esse atendimento a capacidade já está completa às %2$s.',
				'unavailable_capacity_at' => 'A capacidade já está completa às %s.',
				'setting_units_per_session' => 'Units per session',
				'setting_customers_per_session' => 'Customers per session',
				'setting_multiple_customers' => 'Multiple Customers per Session',
				'unavailable_cap_setting_customers' => 'É determinado por Configurações → Booking → “%1$s” (agora %2$d). Aumente-o se o salão puder aceitar mais reservas sobrepostas.',
				'unavailable_cap_setting_units' => 'É determinado pela configuração “%2$s” do serviço%1$s (agora %3$d): capacidade simultânea desse serviço. Abra o serviço para aumentá-la se mais clientes puderem reservar o mesmo horário.',
				'unavailable_cap_setting_assistant_off' => 'É determinado pelo assistente%1$s: “%2$s” está desativado, portanto uma única reserva ocupa-o por toda a duração. Ative-o apenas se ele puder atender vários clientes ao mesmo tempo.',
				'unavailable_cap_setting_assistant_on' => 'O assistente%1$s tem “%2$s” ativo, portanto o limite é “%3$s” (agora %4$d) no serviço / configurações de booking — esse número de reservas sobrepostas já preenche o horário.',
				'unavailable_cap_setting_units_short' => 'Serviço “%1$s” = %2$d',
				'unavailable_cap_setting_customers_short' => 'Salão “%1$s” = %2$d',
				'unavailable_cap_setting_multi_short' => 'Assistente “%1$s” = %2$s',
				'unavailable_cap_setting_generic' => 'Configurações de capacidade relevantes: %s.',
				'unavailable_full_means' => '“Completo” significa que já foi atingido o número máximo de reservas sobrepostas numa parte da duração do atendimento. Esse limite vem de “Units per session” (serviço), “Customers per session” (Configurações → Booking) e/ou “Multiple Customers per Session” (assistente).',
				'unavailable_full_settings_intro' => 'Configurações que o determinam:',
				'unavailable_full_setting_units_line' => '“%1$s” no serviço%2$s → agora %3$d (reservas simultâneas permitidas para esse serviço).',
				'unavailable_full_setting_customers_line' => '“%1$s” em Configurações → Booking → agora %2$d (reservas sobrepostas permitidas ao nível do salão).',
				'unavailable_full_setting_multi_line' => '“%1$s” no assistente%2$s → %3$s. Off = uma reserva preenche o assistente; On = aplica-se o limite Units/Customers per session.',
				'unavailable_full_hint_units' => 'Neste caso o bloqueio é “Units per session” do serviço. Aumente-o na ficha do serviço se mais clientes puderem fazer esse serviço juntos.',
				'unavailable_full_hint_customers' => 'Neste caso o bloqueio é “Customers per session” do salão (Configurações → Booking).',
				'unavailable_full_hint_assistant_off' => 'Neste caso o bloqueio é o assistente: “Multiple Customers per Session” está desativado, portanto ele é exclusivo nesse horário.',
				'unavailable_full_hint_assistant_on' => 'Neste caso o assistente aceita vários clientes, mas o limite Units/Customers per session já foi atingido.',
				'open_customers_per_session' => 'Abrir Customers per session',
				'open_units_per_session' => 'Abrir Units per session (serviço)',
				'open_multiple_customers' => 'Abrir Multiple Customers per Session (assistente)',
				'on' => 'ativo',
				'off' => 'desativado',
				'unavailable_full_check_calendar' => 'Verifique o calendário em torno de %s por reservas que se sobreponham a esse horário. Pode libertar capacidade ao mover/cancelar uma reserva, ou aumentar as unidades/hora do serviço se mais clientes puderem ser atendidos em paralelo.',
				'unavailable_full_check_calendar_bare' => 'Verifique o calendário por reservas sobrepostas, ou aumente as unidades/hora do serviço se mais clientes puderem ser atendidos em paralelo.',
				'fallback_help'      => 'Diga-me o que configurar — horários, feriados, notificações, pagamentos, páginas, serviços/assistentes — ou pergunte onde colar as API keys de pagamento/SMS/OAuth. Também posso sugerir funcionalidades ou add-ons (waitlist, kiosk, multi-shop…).',
				'capability_lead'    => 'Vou indicar a funcionalidade ou o add-on mais adequado.',
				'capability_suggest' => 'Com base no que pediu, estas funcionalidades ou add-ons podem ajudar:',
				'capability_browse'  => 'Aqui estão funcionalidades e add-ons relevantes do Salon Booking System:',
				'capability_none'    => 'Não encontrei uma correspondência clara. Nomeie o objetivo (ex. waitlist, kiosk, pagamentos, multi-shop) ou abra Extensions.',
				'capability_kind_addon' => 'Add-on',
				'capability_kind_feature' => 'Funcionalidade',
				'capability_pro'     => 'PRO',
				'open_extensions'    => 'Abrir Extensions',
				'open_settings'      => 'Abrir configurações',
				'open_addons_page'   => 'Add-ons oficiais',
				'find_booking'       => 'Vou procurar essa reserva (inclui rascunhos e status ERROR).',
				'count_bookings'     => 'Vou contar as suas reservas.',
				'count_bookings_total' => 'Tem %1$d reservas %2$s.',
				'count_bookings_by_status' => 'Por estado:',
				'count_bookings_excl_draft' => 'Rascunhos estão excluídos.',
				'count_bookings_excl_error' => 'Reservas ERROR estão excluídas.',
				'count_bookings_on_day' => 'em %s',
				'count_bookings_between' => 'de %1$s a %2$s',
				'count_bookings_until' => 'até %s',
				'count_bookings_from' => 'a partir de %s',
				'count_bookings_all_time' => 'no total',
				'open_calendar'      => 'Abrir calendário',
				'create_booking'     => 'Vou preparar uma nova reserva. Revise e confirme para salvar.',
				'create_bookings'    => 'Vou preparar essas reservas. Revise e confirme para salvar.',
				'update_booking'     => 'Vou preparar a alteração da reserva. Revise e confirme para salvar.',
				'create_booking_summary' => 'Criar reserva:',
				'create_bookings_summary' => 'Criar %d reservas:',
				'update_booking_summary' => 'Atualizar reserva #%d:',
				'booking_current'    => 'Atual:',
				'booking_proposed'   => 'Proposta:',
				'booking_dates'      => 'Datas:',
				'booking_created'    => 'Reserva #%d criada.',
				'bookings_created'   => '%d reservas criadas: #%s.',
				'bookings_create_partial' => 'Algumas datas falharam: %s.',
				'booking_updated'    => 'Reserva #%d atualizada.',
				'ask_create_booking' => 'Para criar uma reserva preciso de data, hora, serviço e nome ou e-mail do cliente.',
				'ask_create_bookings'=> 'Para várias reservas preciso de hora, serviço, cliente e datas ou “próximas N segundas”.',
				'ask_update_booking_id' => 'Qual reserva alterar? Informe o id (ex. #16) ou peça para eu encontrá-la primeiro.',
				'ask_update_booking_fields' => 'O que alterar nessa reserva — data, hora, serviço, cliente ou status?',
				'find_discount'      => 'Vou verificar seus descontos / cupons.',
				'found_discounts_one'=> '1 desconto encontrado:',
				'found_discounts_many'=> '%d descontos encontrados:',
				'no_discount_id'     => 'Nenhum desconto com id %d.',
				'no_discounts'       => 'Nenhum desconto. Tente id, nome ou código — ou peça a lista sem filtros.',
				'open_discount'      => 'Abrir desconto',
				'open_discounts'     => 'Abrir Descontos',
				'discount_system_off'=> 'O sistema de descontos está desativado. Ative-o primeiro e depois abra Descontos.',
				'discount_addon_missing' => 'O add-on Discount não está disponível neste site.',
				'find_customer'      => 'Vou procurar esse cliente.',
				'found_customers_one'=> '1 cliente encontrado:',
				'found_customers_many'=> '%d clientes encontrados:',
				'no_customer_id'     => 'Nenhum cliente com id %d.',
				'no_customers'       => 'Nenhum cliente. Tente id, nome, e-mail ou telefone — ou a lista sem filtros.',
				'open_customer'      => 'Abrir cliente',
				'open_customers'     => 'Abrir Clientes',
				'find_service'       => 'Vou verificar seus serviços.',
				'found_services_one' => '1 serviço encontrado:',
				'found_services_many'=> '%d serviços encontrados:',
				'no_service_id'      => 'Nenhum serviço com id %d.',
				'no_services'        => 'Nenhum serviço. Tente id ou nome — ou a lista sem filtros.',
				'open_service'       => 'Abrir serviço',
				'open_services'      => 'Abrir Serviços',
				'find_assistant'     => 'Vou verificar seus assistentes.',
				'found_assistants_one'=> '1 assistente encontrado:',
				'found_assistants_many'=> '%d assistentes encontrados:',
				'no_assistant_id'    => 'Nenhum assistente com id %d.',
				'no_assistants'      => 'Nenhum assistente. Tente id ou nome — ou a lista sem filtros.',
				'open_assistant'     => 'Abrir assistente',
				'open_assistants'    => 'Abrir Assistentes',
				'here_configure'     => 'Aqui você configura isso:',
				'update_identity'    => 'Vou atualizar os dados do salão. Confirme a prévia para aplicar.',
				'create_service'     => 'Vou criar/atualizar esse serviço. Confirme a prévia para aplicar.',
				'create_assistant'   => 'Vou criar/atualizar esse assistente. Confirme a prévia para aplicar.',
				'current_holidays'   => 'Estas são as regras de feriados atuais:',
				'ask_holiday_dates'  => 'Que datas devem ficar fechadas? Por exemplo “25 de dezembro”, “de 10 a 20 de agosto” ou “Natal”.',
				'holiday_preview'    => 'Ok — entendi este fechamento. Revise e confirme para aplicar.',
				'clear_holidays'     => 'Vou remover todas as regras de feriados. Confirme a prévia para aplicar.',
				'current_hours'      => 'Estes são os horários de funcionamento atuais:',
				'ask_closing'        => 'Claro — qual horário de fechamento? Por exemplo 20:00.',
				'hours_preview'      => 'Ok — é o que entendi. Revise a prévia e confirme para aplicar.',
				'ask_hours'          => 'Perfeito — aberto %s. Quais horários? Pode dizer “9-18” ou “9:00–18:00”.',
				'ask_days'           => 'Horários anotados. Quais dias? Por exemplo “segunda a sábado” ou “dias úteis”.',
				'none'               => '(nenhum)',
				'no_hours'           => 'Nenhum horário configurado ainda.',
				'per_shop'           => 'Por salão:',
				'chip_first_service' => 'Criar o meu primeiro serviço: Corte, 30 minutos, 25€',
				'chip_payments'      => 'Como aceito pagamentos online?',
				'chip_sms'           => 'Como ativo os lembretes por SMS?',
				'chip_discounts'     => 'Como crio um código de desconto?',
				'chip_gcal'          => 'Como conecto o Google Calendar?',
				'chip_waitlist'      => 'Como recupero cancelamentos de última hora?',
				'chip_kiosk'         => 'Os walk-ins podem reservar por tablet no salão?',
				'chip_hours'         => 'Aberto de segunda a sábado, 9-18',
				'chip_holidays'      => 'Fechado a 25 de dezembro',
				'chip_booking'       => 'Criar uma reserva para Mario Rossi, Corte, amanhã às 10:00',
				'chip_find'          => 'Encontrar a reserva #16',
				'attendance_not_supported' => 'Ainda não consigo atualizar o estado de comparecimento/no-show, nem em massa. Pode marcar cada reserva como no-show na lista de Reservas ou no calendário: %s',
				'booking_need_fields' => 'Para criar a reserva também preciso de: %s. Pode fornecer-me?',
				'field_first_name'   => 'o nome do cliente',
				'field_last_name'    => 'o apelido do cliente',
				'field_email'        => 'o e-mail do cliente',
				'field_phone'        => 'o telemóvel do cliente',
			),
		);
	}
}
