*/ public const LANGUAGES = [ 'en' => 'English', 'de' => 'Deutsch', 'fr' => 'Français', 'es' => 'Español', 'it' => 'Italiano', ]; /** @var array */ private const WP_LOCALES = [ 'en' => 'en_US', 'de' => 'de_DE', 'fr' => 'fr_FR', 'es' => 'es_ES', 'it' => 'it_IT', ]; private static bool $booted = false; /** @var string|null Request-scoped admin UI language (en|de|fr|es|it). */ private static ?string $request_admin_language = null; /** @var string|null Last MO locale successfully loaded for admin/storefront UI. */ private static ?string $loaded_locale = null; public static function normalize(string $raw): string { $raw = strtolower(str_replace('_', '-', trim($raw))); if ($raw === '') { return 'en'; } $base = explode('-', $raw)[0]; return isset(self::LANGUAGES[$base]) ? $base : 'en'; } public static function wp_locale(string $code = ''): string { $code = $code !== '' ? self::normalize($code) : self::admin_language(); return self::WP_LOCALES[$code] ?? 'en_US'; } /** * Suggest from WordPress user locale, then site locale; unsupported → en. */ public static function suggest_from_wordpress(): string { $candidate = ''; if (function_exists('get_user_locale') && is_user_logged_in()) { $candidate = (string) get_user_locale(); } if ($candidate === '' && function_exists('get_locale')) { $candidate = (string) get_locale(); } return self::normalize($candidate); } /** * True when RestoCommerce admin UI language applies (wp-admin, AJAX, CLI). */ public static function is_admin_ui_context(): bool { // WooCommerce fragments and the public menu use AJAX as well. The // admin-ajax transport must not switch shoppers to the admin language. if (function_exists('wp_doing_ajax') && wp_doing_ajax()) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only selects display language. Sanitized action is compared to a fixed allowlist; endpoint authorization is unchanged. $action = isset($_REQUEST['action']) && is_string($_REQUEST['action']) ? sanitize_key(wp_unslash($_REQUEST['action'])) : ''; // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Read-only language-context selector, not an authorization or data-mutating handler. The action is required to be a string and compared against four fixed literals; wc-ajax is tested only for presence. No request value is output, queried or stored, and actual endpoints retain their capability/nonce checks. No unslashing is necessary for the fixed ASCII action tokens: altered input simply fails the strict allowlist. Regression tests: 28 AJAX/admin language cases and 20 gettext recursion/locale checks passed; 81 endpoint rejection tests passed. if (!empty($_REQUEST['wc-ajax']) || (is_string($action) && in_array($action, [ 'fimui_add_to_cart', 'fimui_get_timeslots', 'fimui_get_slot_category_remaining', 'fimui_get_available_dates', ], true))) { return false; } } if (is_admin()) { return true; } if (defined('WP_CLI') && WP_CLI) { return true; } if (defined('RC_INTERFACE_ADMIN_UI') && RC_INTERFACE_ADMIN_UI) { return true; } if (function_exists('wp_doing_ajax') && wp_doing_ajax()) { return true; } // CLI scripts / probes: prefer admin UI language when a user is logged in. if (PHP_SAPI === 'cli' && is_user_logged_in()) { return true; } return false; } /** * Admin / logged-in backend UI language. Manual choice wins. * Unsupported codes fall back to English. Cached per request. */ public static function admin_language(): string { if (self::$request_admin_language !== null) { return self::$request_admin_language; } $resolved = 'en'; if (is_user_logged_in()) { $chosen = (string) get_user_meta(get_current_user_id(), self::USER_META, true); if ($chosen !== '') { $resolved = self::normalize($chosen); } else { $resolved = self::suggest_from_wordpress(); } } else { $resolved = self::suggest_from_wordpress(); } self::$request_admin_language = $resolved; return $resolved; } /** * Public storefront language — separate from admin UI. */ public static function storefront_language(): string { $chosen = (string) get_option(self::STORE_OPTION, ''); if ($chosen !== '') { return self::normalize($chosen); } if (function_exists('get_locale')) { return self::normalize((string) get_locale()); } return 'en'; } /** Active RestoCommerce UI language for this request (admin or storefront). */ private static ?string $forced_language = null; /** Render generated shop content in the shop language, then restore the admin catalog. */ public static function with_storefront_language(callable $callback) { $previous = self::$forced_language; self::$forced_language = self::storefront_language(); self::load_textdomain(); try { return $callback(); } finally { self::$forced_language = $previous; self::load_textdomain(); } } public static function active_language(): string { if (self::$forced_language !== null) return self::$forced_language; return self::is_admin_ui_context() ? self::admin_language() : self::storefront_language(); } /** @deprecated Use admin_language() */ public static function language(): string { return self::admin_language(); } public static function boot(): void { if (self::$booted) { return; } self::$booted = true; add_action('plugins_loaded', [__CLASS__, 'load_textdomain'], 0); // Reload after auth so user meta (rc_ui_language) is available. add_action('init', [__CLASS__, 'load_textdomain'], 1); add_filter('plugin_locale', [__CLASS__, 'filter_plugin_locale'], 10, 2); add_filter('load_textdomain_mofile', [__CLASS__, 'filter_load_textdomain_mofile'], 10, 2); // Broken msgstr must not reach sprintf() on the storefront (PHP 8 ValueError). add_filter('gettext', [__CLASS__, 'filter_gettext_format'], 20, 3); add_filter('ngettext', [__CLASS__, 'filter_ngettext_format'], 20, 5); add_filter('the_title', [__CLASS__, 'filter_known_ui_title'], 20, 1); add_filter('document_title_parts', [__CLASS__, 'filter_document_title_parts'], 20, 1); add_filter('nav_menu_item_title', [__CLASS__, 'filter_known_ui_title'], 20, 1); add_action('admin_post_rc_ui_language', [__CLASS__, 'save_admin_language']); add_action('admin_post_rc_storefront_language', [__CLASS__, 'save_storefront_language']); add_action('admin_init', [__CLASS__, 'register_settings_section']); add_action('admin_menu', [__CLASS__, 'register_support_page'], 30); add_action('admin_enqueue_scripts', [__CLASS__, 'localize_admin_scripts'], 20); add_action('wp_enqueue_scripts', [__CLASS__, 'localize_storefront_scripts'], 20); } /** @return list */ private static function domains(): array { return [self::DOMAIN, 'mom-gastrokomplete', 'restocommerce-menu-ui', 'restocommerce-extras']; } public static function mo_path(string $locale, string $domain = self::DOMAIN): string { $locale = $locale !== '' ? $locale : self::wp_locale(); if ($domain === 'restocommerce-pro') { $base = defined('RESTOCOMMERCE_PRO_PATH') ? trailingslashit(RESTOCOMMERCE_PRO_PATH) : trailingslashit(dirname(RESTOCOMMERCE_PATH)) . 'RestoCommerce-Pro/'; return $base . 'languages/restocommerce-pro-' . $locale . '.mo'; } return trailingslashit(RESTOCOMMERCE_PATH) . 'languages/restocommerce-' . $locale . '.mo'; } public static function load_textdomain(): void { $locale = self::wp_locale(self::active_language()); $mofile = self::mo_path($locale); if (!is_readable($mofile)) { $locale = 'en_US'; $mofile = self::mo_path($locale); } if (self::$loaded_locale === $locale) { return; } foreach (self::domains() as $domain) { // Do not mark reloadable — JIT would otherwise reload via determine_locale(). unload_textdomain($domain, false); if (is_readable($mofile)) { load_textdomain($domain, $mofile); } } // Pro catalog is separate; load when Pro is present. $pro_mo = self::mo_path($locale, 'restocommerce-pro'); unload_textdomain('restocommerce-pro', false); if (is_readable($pro_mo)) { load_textdomain('restocommerce-pro', $pro_mo); } else { $pro_en = self::mo_path('en_US', 'restocommerce-pro'); if (is_readable($pro_en)) { load_textdomain('restocommerce-pro', $pro_en); } } self::$loaded_locale = is_readable($mofile) ? $locale : null; } /** * Default page/menu label "Speisekarte" follows the active catalog (IT: Menù). * Custom titles that are not this exact source string stay unchanged. Slugs are untouched. */ public static function filter_known_ui_title(string $title): string { $exact = [ 'Speisekarte' => __('Speisekarte', 'restocommerce'), 'Speisekarte prüfen' => __('Speisekarte prüfen', 'restocommerce'), 'Bestellen' => __('Bestellen', 'restocommerce'), 'Über uns' => __('Über uns', 'restocommerce'), 'Warenkorb' => __('Warenkorb', 'restocommerce'), 'Impressum' => __('Impressum', 'restocommerce'), 'Datenschutz' => __('Datenschutz', 'restocommerce'), 'AGB' => __('AGB', 'restocommerce'), ]; return $exact[$title] ?? $title; } /** @param array $parts */ public static function filter_document_title_parts(array $parts): array { if (isset($parts['title']) && is_string($parts['title'])) { $parts['title'] = self::filter_known_ui_title($parts['title']); } return $parts; } public static function filter_gettext_format(string $translated, string $text, string $domain): string { if (!in_array($domain, array_merge(self::domains(), ['restocommerce-pro']), true)) { return $translated; } return self::translation_format_safe($text, $translated) ? $translated : $text; } /** * @param mixed $number */ public static function filter_ngettext_format(string $translated, string $single, string $plural, $number, string $domain): string { if (!in_array($domain, array_merge(self::domains(), ['restocommerce-pro']), true)) { return $translated; } $source = ((int) $number === 1) ? $single : $plural; return self::translation_format_safe($source, $translated) ? $translated : $source; } public static function translation_format_safe(string $source, string $translated): bool { $src = self::printf_tokens($source); if ($src === []) { return true; } if ($translated === '') { return true; } if (self::has_lone_percent($translated)) { return false; } $dst = self::printf_tokens($translated); if (count($src) !== count($dst)) { return false; } $a = array_map(static fn(string $t): string => substr($t, -1), $src); $b = array_map(static fn(string $t): string => substr($t, -1), $dst); sort($a); sort($b); return $a === $b; } /** @return list */ private static function printf_tokens(string $format): array { if (!preg_match_all('/%(?:%|(?:\d+\$)?[+-]?(?:\d+|\*)?(?:\.(?:\d+|\*))?[bcdeEfFgGosuxX])/', $format, $m)) { return []; } $out = []; foreach ($m[0] as $token) { if ($token !== '%%') { $out[] = $token; } } return $out; } private static function has_lone_percent(string $format): bool { $i = 0; $len = strlen($format); while ($i < $len) { if ($format[$i] !== '%') { $i++; continue; } if (preg_match('/\G%(?:%|(?:\d+\$)?[+-]?(?:\d+|\*)?(?:\.(?:\d+|\*))?[bcdeEfFgGosuxX])/', $format, $m, 0, $i)) { $i += strlen($m[0]); continue; } return true; } return false; } public static function filter_plugin_locale(string $locale, string $domain): string { $ours = array_merge(self::domains(), ['restocommerce-pro']); if (!in_array($domain, $ours, true)) { return $locale; } return self::wp_locale(self::active_language()); } /** * Force our catalog file when WordPress JIT-loads a RestoCommerce domain. */ public static function filter_load_textdomain_mofile(string $mofile, string $domain): string { $ours = array_merge(self::domains(), ['restocommerce-pro']); if (!in_array($domain, $ours, true)) { return $mofile; } $locale = self::wp_locale(self::active_language()); $candidate = self::mo_path($locale, $domain === 'restocommerce-pro' ? 'restocommerce-pro' : self::DOMAIN); if (!is_readable($candidate) && $locale !== 'en_US') { $candidate = self::mo_path('en_US', $domain === 'restocommerce-pro' ? 'restocommerce-pro' : self::DOMAIN); } return is_readable($candidate) ? $candidate : $mofile; } public static function save_admin_language(): void { if (!current_user_can('manage_options') && !current_user_can('manage_woocommerce')) { wp_die(esc_html__('Forbidden', 'restocommerce'), '', ['response' => 403]); } check_admin_referer('rc_ui_language'); $language = self::normalize(sanitize_key(wp_unslash($_POST['language'] ?? ''))); if (!isset(self::LANGUAGES[$language])) { wp_die(esc_html__('Invalid language', 'restocommerce'), '', ['response' => 400]); } update_user_meta(get_current_user_id(), self::USER_META, $language); self::$request_admin_language = $language; self::$loaded_locale = null; self::load_textdomain(); $redirect = isset($_POST['redirect_to']) ? esc_url_raw(wp_unslash((string) $_POST['redirect_to'])) : ''; if ($redirect === '') { $redirect = admin_url('admin.php?page=gc-setup&step=welcome'); } wp_safe_redirect($redirect); exit; } public static function save_storefront_language(): void { if (!current_user_can('manage_options')) { wp_die(esc_html__('Forbidden', 'restocommerce'), '', ['response' => 403]); } check_admin_referer('rc_storefront_language'); $language = self::normalize(sanitize_key(wp_unslash($_POST['language'] ?? ''))); if (!isset(self::LANGUAGES[$language])) { wp_die(esc_html__('Invalid language', 'restocommerce'), '', ['response' => 400]); } update_option(self::STORE_OPTION, $language, false); $redirect = isset($_POST['redirect_to']) ? esc_url_raw(wp_unslash((string) $_POST['redirect_to'])) : admin_url('admin.php?page=mom-gastrokomplete'); wp_safe_redirect($redirect); exit; } public static function selector(string $redirect_to = ''): void { if ($redirect_to === '') { $redirect_to = admin_url('admin.php?page=gc-setup&step=welcome'); } $current = self::admin_language(); echo '
'; wp_nonce_field('rc_ui_language'); echo ''; echo ''; echo ''; echo ''; echo '
'; } public static function storefront_selector(string $redirect_to = ''): void { if ($redirect_to === '') { $redirect_to = admin_url('admin.php?page=mom-gastrokomplete'); } $current = self::storefront_language(); echo '
'; wp_nonce_field('rc_storefront_language'); echo ''; echo ''; echo ''; echo ''; echo '
'; echo '

' . esc_html__('Die Shop-Sprache gilt für den öffentlichen Bestellbereich und ist unabhängig von der Sprache des angemeldeten Administrators.', 'restocommerce') . '

'; } public static function register_settings_section(): void { if (!current_user_can('manage_options')) { return; } add_settings_section( 'rc_language_section', __('Sprache', 'restocommerce'), static function (): void { echo '

' . esc_html__('Administrationssprache und öffentliche Shop-Sprache getrennt einstellen. Eine manuelle Auswahl hat Vorrang vor der automatischen Erkennung.', 'restocommerce') . '

'; self::selector(admin_url('options-general.php')); self::storefront_selector(admin_url('options-general.php')); }, 'general' ); } public static function register_support_page(): void { if (!function_exists('add_submenu_page')) { return; } add_submenu_page( 'mom-gastrokomplete', __('Support & Ideen', 'restocommerce'), __('Support & Ideen', 'restocommerce'), 'manage_woocommerce', 'rc-support', [__CLASS__, 'render_support'] ); } public static function render_support(): void { if (!current_user_can('manage_woocommerce')) { return; } $url = add_query_arg( [ 'source' => 'plugin', 'lang' => self::admin_language(), ], 'https://crm.momsolutions.de/support/restocommerce' ); echo '

' . esc_html__('Support & Ideen', 'restocommerce') . '

'; echo '
'; echo '

' . esc_html__('Stelle eine Supportanfrage oder schlage eine Verbesserung vor. Deine Anfrage wird zentral bei momSOLUTIONS gespeichert.', 'restocommerce') . '

'; echo '

' . esc_html__('Das Formular öffnet sich im Browser. Kundendaten, Zugangsdaten und Protokolle werden nicht automatisch übertragen.', 'restocommerce') . '

'; echo '' . esc_html__('Supportformular öffnen', 'restocommerce') . ''; echo '

support@restocommerce.de

'; echo '
'; } public static function localize_admin_scripts(): void { $payload = [ 'lang' => self::admin_language(), 'locale' => self::wp_locale(), 'languages' => self::LANGUAGES, 'i18n' => self::js_strings(true), ]; // Real enqueued handles: gc-setup (wizard.js), mom-admin-settings, gc-catalog-v2-menu. // Keep gc-setup-wizard as alias in case an older enqueue remains registered. foreach (['gc-setup', 'gc-setup-wizard', 'mom-admin-settings', 'gc-catalog-v2-menu', 'mom-payment-methods', 'mom-admin'] as $handle) { if (wp_script_is($handle, 'enqueued') || wp_script_is($handle, 'registered')) { wp_localize_script($handle, 'rcI18n', $payload); } } } public static function localize_storefront_scripts(): void { $payload = [ 'lang' => self::storefront_language(), 'locale' => self::wp_locale(self::storefront_language()), 'i18n' => self::js_strings(false), ]; // Real handle is mom-service-type; keep service-type as alias. foreach (['gc-storefront-legal', 'mom-service-type', 'service-type', 'gc-v2-shop', 'gc-web-v2-shop', 'fimui-checkout-script', 'fimui-script', 'gc-reservations', 'gastrocomplete-theme', 'rc-payment-choice'] as $handle) { if (wp_script_is($handle, 'enqueued') || wp_script_is($handle, 'registered')) { wp_localize_script($handle, 'rcI18n', $payload); } } } /** * Common JS strings (admin or storefront). Source msgids stay German for gettext. * Keys include short aliases and German source strings (for JS t(keyOrDe)). * * @return array */ private static function js_strings(bool $admin): array { $common = [ 'Fehlenden Artikel ergänzen' => __('Fehlenden Artikel ergänzen', 'restocommerce'), 'Alle erkannten Artikel bleiben bis zur Freigabe ein Entwurf. Unter „Bearbeiten“ kannst du Preise, Texte, Varianten, Zutaten, Extras und Allergene ändern. Gleiche jede Seite mit deiner Originaldatei ab.' => __('Alle erkannten Artikel bleiben bis zur Freigabe ein Entwurf. Unter „Bearbeiten“ kannst du Preise, Texte, Varianten, Zutaten, Extras und Allergene ändern. Gleiche jede Seite mit deiner Originaldatei ab.', 'restocommerce'), 'Erst nach dem Speichern und der Bestätigung aller Seiten werden die Artikel angelegt. Unklare Preise müssen vorher ergänzt werden. Allergene und Steuersätze bitte fachlich prüfen.' => __('Erst nach dem Speichern und der Bestätigung aller Seiten werden die Artikel angelegt. Unklare Preise müssen vorher ergänzt werden. Allergene und Steuersätze bitte fachlich prüfen.', 'restocommerce'), 'Seitenbestätigung fehlt für Seite %s. Bitte im Seitenabgleich bestätigen und Änderungen speichern. Artikelkorrekturen allein bestätigen keine vollständige Seite.' => /* translators: placeholder is a count or menu value. */ __('Seitenbestätigung fehlt für Seite %s. Bitte im Seitenabgleich bestätigen und Änderungen speichern. Artikelkorrekturen allein bestätigen keine vollständige Seite.', 'restocommerce'), 'Alle geprüften Artikel anlegen' => __('Alle geprüften Artikel anlegen', 'restocommerce'), '%s: keine Angabe in der Auswertung – prüfen' => /* translators: placeholder is a count or menu value. */ __('%s: keine Angabe in der Auswertung – prüfen', 'restocommerce'), '1 Größe' => __('1 Größe', 'restocommerce'), '1 Artikel' => __('1 Artikel', 'restocommerce'), 'Abwählbare Zutaten (eine pro Zeile)' => __('Abwählbare Zutaten (eine pro Zeile)', 'restocommerce'), 'Artikelnummer (Original)' => __('Artikelnummer (Original)', 'restocommerce'), 'Es gibt eine gespeicherte Auswertung. Bitte zuerst fortsetzen; so vermeiden wir doppelten Verbrauch.' => __('Es gibt eine gespeicherte Auswertung. Bitte zuerst fortsetzen; so vermeiden wir doppelten Verbrauch.', 'restocommerce'), 'Preis (ohne Varianten)' => __('Preis (ohne Varianten)', 'restocommerce'), 'Steuersatz (%)' => __('Steuersatz (%)', 'restocommerce'), 'Zutaten (eine pro Zeile)' => __('Zutaten (eine pro Zeile)', 'restocommerce'), 'Zuklappen' => __('Zuklappen', 'restocommerce'), 'Aufklappen' => __('Aufklappen', 'restocommerce'), 'Alle Seiten' => __('Alle Seiten', 'restocommerce'), 'Legende der Originalkarte – Kürzel ausschreiben' => __('Legende der Originalkarte – Kürzel ausschreiben', 'restocommerce'), 'Nur die Zuordnung deiner Originalkarte verwenden. Keine allgemeine Buchstabenliste: dieselben Kürzel können auf anderen Karten etwas anderes bedeuten. Eine Zuordnung pro Zeile, z. B. A = Getreideprodukte.' => __('Nur die Zuordnung deiner Originalkarte verwenden. Keine allgemeine Buchstabenliste: dieselben Kürzel können auf anderen Karten etwas anderes bedeuten. Eine Zuordnung pro Zeile, z. B. A = Getreideprodukte.', 'restocommerce'), 'Allergen-Legende' => __('Allergen-Legende', 'restocommerce'), 'Zusatzstoff-Legende' => __('Zusatzstoff-Legende', 'restocommerce'), 'Beim Speichern werden die Kürzel in allen Artikeln ausgeschrieben. Nicht zugeordnete Kürzel sperren die Freigabe.' => __('Beim Speichern werden die Kürzel in allen Artikeln ausgeschrieben. Nicht zugeordnete Kürzel sperren die Freigabe.', 'restocommerce'), 'Du kannst die Prüfung später fortsetzen. Alle Artikel bleiben gespeichert im Entwurf und werden noch nicht im Shop angelegt.' => __('Du kannst die Prüfung später fortsetzen. Alle Artikel bleiben gespeichert im Entwurf und werden noch nicht im Shop angelegt.', 'restocommerce'), 'Prüfung später fortsetzen · Weiter' => __('Prüfung später fortsetzen · Weiter', 'restocommerce'), 'Betroffenen Artikel bearbeiten' => __('Betroffenen Artikel bearbeiten', 'restocommerce'), 'Seitenabgleich: %1$s von %2$s Seiten bestätigt' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('Seitenabgleich: %1$s von %2$s Seiten bestätigt', 'restocommerce'), '%s Größen' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('%s Größen', 'restocommerce'), 'Variante hinzufügen' => __('Variante hinzufügen', 'restocommerce'), 'Extra hinzufügen' => __('Extra hinzufügen', 'restocommerce'), '%s Artikel geprüft und gespeichert. Bereit zum Anlegen.' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('%s Artikel geprüft und gespeichert. Bereit zum Anlegen.', 'restocommerce'), 'Verbindung unterbrochen. Der gespeicherte Auftrag wird erneut abgerufen; es wird kein neuer Import gestartet.' => __('Verbindung unterbrochen. Der gespeicherte Auftrag wird erneut abgerufen; es wird kein neuer Import gestartet.', 'restocommerce'), 'Das verfügbare Kontingent berücksichtigt abgeschlossene Auswertungen und offene Reservierungen. Es zeigt nicht die tatsächliche Rechnung des KI-Anbieters.' => __('Das verfügbare Kontingent berücksichtigt abgeschlossene Auswertungen und offene Reservierungen. Es zeigt nicht die tatsächliche Rechnung des KI-Anbieters.', 'restocommerce'), 'Artikel %s fehlt in der Auswertung.' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('Artikel %s fehlt in der Auswertung.', 'restocommerce'), 'Artikel %s fehlt im unabhängigen Verzeichnis.' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('Artikel %s fehlt im unabhängigen Verzeichnis.', 'restocommerce'), 'Doppelte Artikelzuordnung.' => __('Doppelte Artikelzuordnung.', 'restocommerce'), '%1$s: Größenanzahl weicht vom Verzeichnis ab (%2$s erwartet, %3$s erfasst).' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('%1$s: Größenanzahl weicht vom Verzeichnis ab (%2$s erwartet, %3$s erfasst).', 'restocommerce'), '%s: Preise oder Preisspalten weichen vom unabhängigen Verzeichnis ab. Bitte mit dem Original abgleichen.' => /* translators: placeholders contain page counts, item numbers or menu labels. */ __('%s: Preise oder Preisspalten weichen vom unabhängigen Verzeichnis ab. Bitte mit dem Original abgleichen.', 'restocommerce'), 'Ohne Nummer' => __('Ohne Nummer', 'restocommerce'), ' (inaktiv)' => __(' (inaktiv)', 'restocommerce'), '0 = keiner' => __('0 = keiner', 'restocommerce'), '0 = nie' => __('0 = nie', 'restocommerce'), 'Checkout: Aktiv, Service, Standard, Reihenfolge und Texte.' => __('Checkout: Aktiv, Service, Standard, Reihenfolge und Texte.', 'restocommerce'), 'Gebiet' => __('Gebiet', 'restocommerce'), 'Kasse/POS und fiskalische Funktionen gehören zu %s.' => /* translators: %s: product name (GastroComplete). */ __('Kasse/POS und fiskalische Funktionen gehören zu %s.', 'restocommerce'), 'Kostenlos ab (€)' => __('Kostenlos ab (€)', 'restocommerce'), 'Laden…' => __('Laden…', 'restocommerce'), 'Liefergebiet hinzufügen' => __('Liefergebiet hinzufügen', 'restocommerce'), 'Liefergebühr (€)' => __('Liefergebühr (€)', 'restocommerce'), 'Mindestbestellwert (€)' => __('Mindestbestellwert (€)', 'restocommerce'), 'Online · ' => __('Online · ', 'restocommerce'), 'PLZ einzeln oder als Bereich (80331-80335). Nur bei „Nach Postleitzahl“ aktiv. Keine Überschneidungen.' => __('PLZ einzeln oder als Bereich (80331-80335). Nur bei „Nach Postleitzahl“ aktiv. Keine Überschneidungen.', 'restocommerce'), 'Postleitzahlen' => __('Postleitzahlen', 'restocommerce'), 'Webshop' => __('Webshop', 'restocommerce'), 'Zum Entfernen alle Felder einer Zeile leeren.' => __('Zum Entfernen alle Felder einer Zeile leeren.', 'restocommerce'), 'ab ' => __('ab ', 'restocommerce'), 'Abbruch noch %d Sekunden möglich.' => /* translators: %d: remaining cancellation seconds. */ __('Abbruch noch %d Sekunden möglich.', 'restocommerce'), 'Aktuell ist kein Abbruch über die Webseite möglich.' => __('Aktuell ist kein Abbruch über die Webseite möglich.', 'restocommerce'), 'Möchten Sie diese Bestellung wirklich abbrechen?' => __('Möchten Sie diese Bestellung wirklich abbrechen?', 'restocommerce'), 'Ja, Bestellung abbrechen' => __('Ja, Bestellung abbrechen', 'restocommerce'), 'Bestellung behalten' => __('Bestellung behalten', 'restocommerce'), 'Ihr Abbruch wird bearbeitet …' => __('Ihr Abbruch wird bearbeitet …', 'restocommerce'), 'Der Vorgang konnte nicht bestätigt werden. Bitte laden Sie die Seite neu.' => __('Der Vorgang konnte nicht bestätigt werden. Bitte laden Sie die Seite neu.', 'restocommerce'), 'Die Antwort konnte nicht geladen werden. Bitte laden Sie die Seite neu, um den Status zu prüfen.' => __('Die Antwort konnte nicht geladen werden. Bitte laden Sie die Seite neu, um den Status zu prüfen.', 'restocommerce'), 'Aktuelle Datei öffnen' => __('Aktuelle Datei öffnen', 'restocommerce'), 'Bild ändern' => __('Bild ändern', 'restocommerce'), 'Aktivieren' => __('Aktivieren', 'restocommerce'), /* translators: %s: number of pages requiring review. */ 'Seitenabgleich: %s auffällige Seiten' => __('Seitenabgleich: %s auffällige Seiten', 'restocommerce'), 'Keine Abweichung im automatischen Seitenabgleich.' => __('Keine Abweichung im automatischen Seitenabgleich.', 'restocommerce'), 'Prüfhinweise am Original geprüft und Angaben bestätigt.' => __('Prüfhinweise am Original geprüft und Angaben bestätigt.', 'restocommerce'), /* translators: 1: number of items needing review, 2: total number of items. */ '%1$s von %2$s Artikeln benötigen Prüfung.' => __('%1$s von %2$s Artikeln benötigen Prüfung.', 'restocommerce'), 'Bitte die Bestätigung mit „Änderungen speichern“ speichern.' => __('Bitte die Bestätigung mit „Änderungen speichern“ speichern.', 'restocommerce'), 'Nur Artikel mit Prüfhinweisen' => __('Nur Artikel mit Prüfhinweisen', 'restocommerce'), 'Offene Seitenbestätigungen anzeigen' => __('Offene Seitenbestätigungen anzeigen', 'restocommerce'), 'Ausführung und Extras wählen' => __('Ausführung und Extras wählen', 'restocommerce'), 'Preis nach Auswahl der Größe' => __('Preis nach Auswahl der Größe', 'restocommerce'), 'Warenkorb' => __('Warenkorb', 'restocommerce'), 'Suche' => __('Suche', 'restocommerce'), 'Kasse' => __('Kasse', 'restocommerce'), 'Produkt' => __('Produkt', 'restocommerce'), 'PRODUKT' => __('PRODUKT', 'restocommerce'), 'PREIS' => __('PREIS', 'restocommerce'), 'Gesamtsumme' => __('Gesamtsumme', 'restocommerce'), 'GESAMT' => __('GESAMT', 'restocommerce'), 'Warenkorb-Summe' => __('Warenkorb-Summe', 'restocommerce'), 'WARENKORB-SUMME' => __('WARENKORB-SUMME', 'restocommerce'), 'Gutschein hinzufügen' => __('Gutschein hinzufügen', 'restocommerce'), 'Gutscheincode' => __('Gutscheincode', 'restocommerce'), 'Gutschein:' => __('Gutschein:', 'restocommerce'), 'Gutschein einlösen' => __('Gutschein einlösen', 'restocommerce'), 'Einlösen' => __('Einlösen', 'restocommerce'), 'Zur Kasse' => __('Zur Kasse', 'restocommerce'), 'Kontaktdaten' => __('Kontaktdaten', 'restocommerce'), 'E-Mail-Adresse' => __('E-Mail-Adresse', 'restocommerce'), 'Rechnungsadresse' => __('Rechnungsadresse', 'restocommerce'), 'Lieferadresse' => __('Lieferadresse', 'restocommerce'), 'Land/Region' => __('Land/Region', 'restocommerce'), 'Vorname' => __('Vorname', 'restocommerce'), 'Nachname' => __('Nachname', 'restocommerce'), 'Adresse' => __('Adresse', 'restocommerce'), 'Postleitzahl' => __('Postleitzahl', 'restocommerce'), 'Ort' => __('Ort', 'restocommerce'), 'Bundesland (optional)' => __('Bundesland (optional)', 'restocommerce'), 'Telefon' => __('Telefon', 'restocommerce'), 'Zahlungsarten' => __('Zahlungsarten', 'restocommerce'), 'Barzahlung bei Abholung / Lieferung' => __('Barzahlung bei Abholung / Lieferung', 'restocommerce'), 'Bitte bar bei Abholung oder Lieferung zahlen.' => __('Bitte bar bei Abholung oder Lieferung zahlen.', 'restocommerce'), 'Anmerkung zur Bestellung hinzufügen' => __('Anmerkung zur Bestellung hinzufügen', 'restocommerce'), 'Zahlungspflichtig bestellen' => __('Zahlungspflichtig bestellen', 'restocommerce'), 'Bestellübersicht' => __('Bestellübersicht', 'restocommerce'), 'Zwischensumme' => __('Zwischensumme', 'restocommerce'), 'Zwischensumme:' => __('Zwischensumme:', 'restocommerce'), 'Bestellung eingegangen' => __('Bestellung eingegangen', 'restocommerce'), 'Vielen Dank. Deine Bestellung ist eingegangen.' => __('Vielen Dank. Deine Bestellung ist eingegangen.', 'restocommerce'), 'Bestellnummer' => __('Bestellnummer', 'restocommerce'), 'BESTELLNUMMER:' => __('BESTELLNUMMER:', 'restocommerce'), 'DATUM:' => __('DATUM:', 'restocommerce'), 'E-MAIL:' => __('E-MAIL:', 'restocommerce'), 'ZAHLUNGSART:' => __('ZAHLUNGSART:', 'restocommerce'), 'Zahlungsart' => __('Zahlungsart', 'restocommerce'), 'Zahlungsart:' => __('Zahlungsart:', 'restocommerce'), 'Anmerkung:' => __('Anmerkung:', 'restocommerce'), 'Anmerkung' => __('Anmerkung', 'restocommerce'), 'AGB' => __('AGB', 'restocommerce'), 'Datenschutzerklärung' => __('Datenschutzerklärung', 'restocommerce'), 'Artikel entfernen' => __('Artikel entfernen', 'restocommerce'), 'Menge' => __('Menge', 'restocommerce'), 'Warenkorb aktualisieren' => __('Warenkorb aktualisieren', 'restocommerce'), 'Dein Warenkorb ist leer.' => __('Dein Warenkorb ist leer.', 'restocommerce'), 'Zur Speisekarte' => __('Zur Speisekarte', 'restocommerce'), 'Die Speisekarte wird gerade eingerichtet. Gerichte erscheinen hier, sobald sie importiert sind.' => __('Die Speisekarte wird gerade eingerichtet. Gerichte erscheinen hier, sobald sie importiert sind.', 'restocommerce'), 'Hast du einen Gutschein?' => __('Hast du einen Gutschein?', 'restocommerce'), 'Code eingeben' => __('Code eingeben', 'restocommerce'), 'Rechnungsdaten' => __('Rechnungsdaten', 'restocommerce'), 'Deine Bestellung' => __('Deine Bestellung', 'restocommerce'), 'Straße und Hausnummer' => __('Straße und Hausnummer', 'restocommerce'), 'PLZ' => __('PLZ', 'restocommerce'), 'Bundesland' => __('Bundesland', 'restocommerce'), 'Bestellhinweise' => __('Bestellhinweise', 'restocommerce'), 'Bestellhinweise (optional)' => __('Bestellhinweise (optional)', 'restocommerce'), 'Inkl. ' => __('Inkl. ', 'restocommerce'), '(Inkl. )' => __('(Inkl. )', 'restocommerce'), 'Mit dem Absenden akzeptierst du unsere und ' => __('Mit dem Absenden akzeptierst du unsere und ', 'restocommerce'), 'Inkl.' => __('Inkl.', 'restocommerce'), 'Textfelder ausgefüllt.' => __('Textfelder ausgefüllt.', 'restocommerce'), 'JSON gelesen, aber Meta-Titel oder Startseiten-Text fehlen.' => __('JSON gelesen, aber Meta-Titel oder Startseiten-Text fehlen.', 'restocommerce'), 'Installiere …' => __('Installiere …', 'restocommerce'), 'Aktiviere …' => __('Aktiviere …', 'restocommerce'), 'Installiere Theme …' => __('Installiere Theme …', 'restocommerce'), 'z.B. Klein, Mittel, Groß' => __('z.B. Klein, Mittel, Groß', 'restocommerce'), 'Sende …' => __('Sende …', 'restocommerce'), 'Auswahl geändert. Bitte den Preis erneut prüfen.' => __('Auswahl geändert. Bitte den Preis erneut prüfen.', 'restocommerce'), 'Ausführung wählen · Pflicht' => __('Ausführung wählen · Pflicht', 'restocommerce'), 'Ausführung geändert. Ihre Extras bleiben ausgewählt; der Gesamtpreis wird erneut geprüft.' => __('Ausführung geändert. Ihre Extras bleiben ausgewählt; der Gesamtpreis wird erneut geprüft.', 'restocommerce'), 'Enthaltene Zutaten' => __('Enthaltene Zutaten', 'restocommerce'), 'hinzufügen' => __('hinzufügen', 'restocommerce'), 'Artikelanzahl verringern' => __('Artikelanzahl verringern', 'restocommerce'), 'Artikelanzahl erhöhen' => __('Artikelanzahl erhöhen', 'restocommerce'), 'Ihr Hinweis' => __('Ihr Hinweis', 'restocommerce'), 'Preis prüfen' => __('Preis prüfen', 'restocommerce'), 'Bitte wählen Sie eine Ausführung.' => __('Bitte wählen Sie eine Ausführung.', 'restocommerce'), 'Preis wird geprüft …' => __('Preis wird geprüft …', 'restocommerce'), 'Preisprüfung nicht verfügbar.' => __('Preisprüfung nicht verfügbar.', 'restocommerce'), 'Gesamt:' => __('Gesamt:', 'restocommerce'), 'Extras je Artikel:' => __('Extras je Artikel:', 'restocommerce'), 'Rabatt:' => __('Rabatt:', 'restocommerce'), 'Pfand:' => __('Pfand:', 'restocommerce'), 'Enthaltene Steuer:' => __('Enthaltene Steuer:', 'restocommerce'), 'Preis bestätigen und in den Warenkorb' => __('Preis bestätigen und in den Warenkorb', 'restocommerce'), 'Wird hinzugefügt …' => __('Wird hinzugefügt …', 'restocommerce'), 'Der Warenkorb konnte nicht aktualisiert werden.' => __('Der Warenkorb konnte nicht aktualisiert werden.', 'restocommerce'), 'Im Warenkorb gespeichert.' => __('Im Warenkorb gespeichert.', 'restocommerce'), 'Hinzugefügt' => __('Hinzugefügt', 'restocommerce'), 'Zum Warenkorb' => __('Zum Warenkorb', 'restocommerce'), 'Anzahl' => __('Anzahl', 'restocommerce'), 'weniger' => __('weniger', 'restocommerce'), 'Wähle genau %d' => /* translators: %d: required selection count. */ __('Wähle genau %d', 'restocommerce'), 'Wähle mindestens %d' => /* translators: %d: minimum selection count. */ __('Wähle mindestens %d', 'restocommerce'), ', höchstens' => __(', höchstens', 'restocommerce'), 'Bitte prüfen Sie die Auswahl in „%s“.' => /* translators: %s: option group name. */ __('Bitte prüfen Sie die Auswahl in „%s“.', 'restocommerce'), '· Pflicht' => __('· Pflicht', 'restocommerce'), '✓ Adresse ausgewählt' => __('✓ Adresse ausgewählt', 'restocommerce'), 'Standortdienste werden von Ihrem Browser nicht unterstützt. Bitte Adresse manuell eingeben.' => __('Standortdienste werden von Ihrem Browser nicht unterstützt. Bitte Adresse manuell eingeben.', 'restocommerce'), 'Standortzugriff ist nur über HTTPS möglich. Bitte Adresse manuell eingeben.' => __('Standortzugriff ist nur über HTTPS möglich. Bitte Adresse manuell eingeben.', 'restocommerce'), 'Bitte Standortzugriff im Browser erlauben …' => __('Bitte Standortzugriff im Browser erlauben …', 'restocommerce'), 'Adresse wird ermittelt …' => __('Adresse wird ermittelt …', 'restocommerce'), 'Adresse konnte nicht ermittelt werden. Bitte manuell eingeben.' => __('Adresse konnte nicht ermittelt werden. Bitte manuell eingeben.', 'restocommerce'), 'Standort konnte nicht ermittelt werden. Bitte Adresse manuell eingeben.' => __('Standort konnte nicht ermittelt werden. Bitte Adresse manuell eingeben.', 'restocommerce'), 'Standortzugriff wurde verweigert. Bitte erlauben Sie den Zugriff im Browser oder geben Sie die Adresse manuell ein.' => __('Standortzugriff wurde verweigert. Bitte erlauben Sie den Zugriff im Browser oder geben Sie die Adresse manuell ein.', 'restocommerce'), 'Standort ist derzeit nicht verfügbar. Bitte Adresse manuell eingeben.' => __('Standort ist derzeit nicht verfügbar. Bitte Adresse manuell eingeben.', 'restocommerce'), 'Zeitüberschreitung bei der Standortabfrage. Bitte erneut versuchen oder manuell eingeben.' => __('Zeitüberschreitung bei der Standortabfrage. Bitte erneut versuchen oder manuell eingeben.', 'restocommerce'), '✕ Bitte gib eine gültige Adresse mit PLZ ein.' => __('✕ Bitte gib eine gültige Adresse mit PLZ ein.', 'restocommerce'), '⏳ Prüfe Liefergebiet...' => __('⏳ Prüfe Liefergebiet...', 'restocommerce'), '✕ Fehler bei der Validierung. Bitte versuche es erneut.' => __('✕ Fehler bei der Validierung. Bitte versuche es erneut.', 'restocommerce'), 'Adresse geprüft' => __('Adresse geprüft', 'restocommerce'), 'Anfrage wird gesendet...' => __('Anfrage wird gesendet...', 'restocommerce'), 'Vielen Dank. Ihre Anfrage wurde versendet.' => __('Vielen Dank. Ihre Anfrage wurde versendet.', 'restocommerce'), 'Die Anfrage konnte nicht gespeichert werden.' => __('Die Anfrage konnte nicht gespeichert werden.', 'restocommerce'), 'Die Anfrage konnte nicht gesendet werden.' => __('Die Anfrage konnte nicht gesendet werden.', 'restocommerce'), '· Nur Lieferauskunft – Lieferadresse bitte im Checkout eingeben · Ändern' => __('· Nur Lieferauskunft – Lieferadresse bitte im Checkout eingeben · Ändern', 'restocommerce'), ' · Nur Lieferauskunft – Lieferadresse bitte im Checkout eingeben · Ändern' => ' ' . __('· Nur Lieferauskunft – Lieferadresse bitte im Checkout eingeben · Ändern', 'restocommerce'), 'Seite' => __('Seite', 'restocommerce'), 'Nr.' => __('Nr.', 'restocommerce'), 'Seitenabgleich:' => __('Seitenabgleich:', 'restocommerce'), 'Artikel' => __('Artikel', 'restocommerce'), 'Verzeichnis:' => __('Verzeichnis:', 'restocommerce'), 'Auswertung:' => __('Auswertung:', 'restocommerce'), ' Artikeln' => __(' Artikeln', 'restocommerce'), ' Größen' => __(' Größen', 'restocommerce'), ' Hinweise' => __(' Hinweise', 'restocommerce'), ' hinzufügen' => __(' hinzufügen', 'restocommerce'), ' von ' => __(' von ', 'restocommerce'), 'Allergene' => __('Allergene', 'restocommerce'), 'Artikeldetails' => __('Artikeldetails', 'restocommerce'), 'Artikelverzeichnis' => __('Artikelverzeichnis', 'restocommerce'), 'Aufpreis' => __('Aufpreis', 'restocommerce'), 'Auswertung fortsetzen' => __('Auswertung fortsetzen', 'restocommerce'), 'Bezeichnung' => __('Bezeichnung', 'restocommerce'), 'Bitte zuordnen' => __('Bitte zuordnen', 'restocommerce'), 'Entfernen' => __('Entfernen', 'restocommerce'), 'Deaktivieren' => __('Deaktivieren', 'restocommerce'), 'Zusatzstoffe:' => __('Zusatzstoffe:', 'restocommerce'), 'z.B. 7,50' => __('z.B. 7,50', 'restocommerce'), 'Noch keine Produkte.' => __('Noch keine Produkte.', 'restocommerce'), 'Keine Gruppe' => __('Keine Gruppe', 'restocommerce'), 'Alle' => __('Alle', 'restocommerce'), 'Suchen…' => __('Suchen…', 'restocommerce'), 'Extra' => __('Extra', 'restocommerce'), 'Extras für diese Kategorie übernehmen' => __('Extras für diese Kategorie übernehmen', 'restocommerce'), 'Gericht' => __('Gericht', 'restocommerce'), 'Hinweise zur Vorschau' => __('Hinweise zur Vorschau', 'restocommerce'), /* translators: %d: number of dishes in the menu preview. */ 'Gerichte: %d' => __('Gerichte: %d', 'restocommerce'), /* translators: %d: number of review notes in the menu preview. */ 'Prüfhinweise: %d' => __('Prüfhinweise: %d', 'restocommerce'), 'Mit Original abgeglichen: alle Artikel, Größen und Extras vorhanden; Angaben geprüft.' => __('Mit Original abgeglichen: alle Artikel, Größen und Extras vorhanden; Angaben geprüft.', 'restocommerce'), 'Neue Datei auswerten' => __('Neue Datei auswerten', 'restocommerce'), 'Preis' => __('Preis', 'restocommerce'), 'Preis fehlt' => __('Preis fehlt', 'restocommerce'), 'Prüfung offen' => __('Prüfung offen', 'restocommerce'), 'Prüfung offen:' => __('Prüfung offen:', 'restocommerce'), 'Seite %1$s von %2$s · %3$s · bisher %4$s Artikel' => /* translators: 1: current page; 2: total pages; 3: import progress; 4: imported article count. */ __('Seite %1$s von %2$s · %3$s · bisher %4$s Artikel', 'restocommerce'), 'Text / Beschreibung' => __('Text / Beschreibung', 'restocommerce'), 'Variante' => __('Variante', 'restocommerce'), 'Zusatzstoffe' => __('Zusatzstoffe', 'restocommerce'), 'alle Einträge, bitte nach unten scrollen.' => __('alle Einträge, bitte nach unten scrollen.', 'restocommerce'), 'tr' => __('tr', 'restocommerce'), 'save' => __('Speichern', 'restocommerce'), 'cancel' => __('Abbrechen', 'restocommerce'), 'close' => __('Schließen', 'restocommerce'), 'back' => __('Zurück', 'restocommerce'), 'next' => __('Weiter', 'restocommerce'), 'error' => __('Fehler', 'restocommerce'), 'loading' => __('Wird geladen…', 'restocommerce'), 'success' => __('Gespeichert.', 'restocommerce'), // German keys for JS t('…') fallback pattern 'Speichern' => __('Speichern', 'restocommerce'), 'Abbrechen' => __('Abbrechen', 'restocommerce'), 'Schließen' => __('Schließen', 'restocommerce'), 'Zurück' => __('Zurück', 'restocommerce'), 'Weiter' => __('Weiter', 'restocommerce'), 'Fehler' => __('Fehler', 'restocommerce'), 'Wird geladen…' => __('Wird geladen…', 'restocommerce'), 'Gespeichert.' => __('Gespeichert.', 'restocommerce'), 'Gespeichert' => __('Gespeichert', 'restocommerce'), '✓ Gespeichert' => __('✓ Gespeichert', 'restocommerce'), 'Speichern …' => __('Speichern …', 'restocommerce'), 'Speichern und weiter' => __('Speichern und weiter', 'restocommerce'), 'Speichern fehlgeschlagen.' => __('Speichern fehlgeschlagen.', 'restocommerce'), 'Kopiert.' => __('Kopiert.', 'restocommerce'), 'Kopiert' => __('Kopiert', 'restocommerce'), 'Kopieren fehlgeschlagen. Text markieren und Strg+C.' => __('Kopieren fehlgeschlagen. Text markieren und Strg+C.', 'restocommerce'), 'Löschen' => __('Löschen', 'restocommerce'), 'Bearbeiten' => __('Bearbeiten', 'restocommerce'), 'Erneut versuchen' => __('Erneut versuchen', 'restocommerce'), '— wählen —' => __('— wählen —', 'restocommerce'), 'Datei wählen' => __('Datei wählen', 'restocommerce'), 'Installation fehlgeschlagen.' => __('Installation fehlgeschlagen.', 'restocommerce'), 'Aktivierung fehlgeschlagen.' => __('Aktivierung fehlgeschlagen.', 'restocommerce'), 'Theme-Installation fehlgeschlagen.' => __('Theme-Installation fehlgeschlagen.', 'restocommerce'), 'SEO-Daten ungültig.' => __('SEO-Daten ungültig.', 'restocommerce'), 'Produkt speichern' => __('Produkt speichern', 'restocommerce'), 'Produkt gelöscht.' => __('Produkt gelöscht.', 'restocommerce'), 'Laden fehlgeschlagen.' => __('Laden fehlgeschlagen.', 'restocommerce'), 'Löschen fehlgeschlagen.' => __('Löschen fehlgeschlagen.', 'restocommerce'), 'Anlegen fehlgeschlagen.' => __('Anlegen fehlgeschlagen.', 'restocommerce'), 'Aktualisieren fehlgeschlagen.' => __('Aktualisieren fehlgeschlagen.', 'restocommerce'), 'JSON ungültig – Felder wurden nicht übernommen.' => __('JSON ungültig – Felder wurden nicht übernommen.', 'restocommerce'), ' Textfelder ausgefüllt.' => __(' Textfelder ausgefüllt.', 'restocommerce'), 'SEO-Texte aus JSON übernommen.' => __('SEO-Texte aus JSON übernommen.', 'restocommerce'), /* translators: %d: number of text fields filled from the SEO JSON. */ 'JSON übernommen: %d Textfelder ausgefüllt.' => __('JSON übernommen: %d Textfelder ausgefüllt.', 'restocommerce'), 'WooCommerce installieren' => __('WooCommerce installieren', 'restocommerce'), 'WooCommerce aktivieren' => __('WooCommerce aktivieren', 'restocommerce'), 'Ohne Kategorie' => __('Ohne Kategorie', 'restocommerce'), 'Kategoriename fehlt.' => __('Kategoriename fehlt.', 'restocommerce'), 'Kategorie fehlgeschlagen.' => __('Kategorie fehlgeschlagen.', 'restocommerce'), 'Zutat fehlgeschlagen.' => __('Zutat fehlgeschlagen.', 'restocommerce'), 'Allergen fehlgeschlagen.' => __('Allergen fehlgeschlagen.', 'restocommerce'), 'Gruppenname fehlt.' => __('Gruppenname fehlt.', 'restocommerce'), 'Gruppe fehlgeschlagen.' => __('Gruppe fehlgeschlagen.', 'restocommerce'), 'Extra-Name fehlt.' => __('Extra-Name fehlt.', 'restocommerce'), 'Extra fehlgeschlagen.' => __('Extra fehlgeschlagen.', 'restocommerce'), 'Produktname fehlt.' => __('Produktname fehlt.', 'restocommerce'), 'Ungespeicherte Änderungen verwerfen und weiteres Produkt anlegen?' => __('Ungespeicherte Änderungen verwerfen und weiteres Produkt anlegen?', 'restocommerce'), 'Produkt wirklich löschen?' => __('Produkt wirklich löschen?', 'restocommerce'), 'Medienbibliothek nicht geladen.' => __('Medienbibliothek nicht geladen.', 'restocommerce'), 'Kategoriebild ändern' => __('Kategoriebild ändern', 'restocommerce'), 'Bild konnte nicht gespeichert werden.' => __('Bild konnte nicht gespeichert werden.', 'restocommerce'), 'Bitte einen Kategorienamen eingeben.' => __('Bitte einen Kategorienamen eingeben.', 'restocommerce'), 'Lizenz wird geprüft …' => __('Lizenz wird geprüft …', 'restocommerce'), 'Lizenzprüfung fehlgeschlagen.' => __('Lizenzprüfung fehlgeschlagen.', 'restocommerce'), 'CRM nicht erreichbar. Bitte erneut versuchen.' => __('CRM nicht erreichbar. Bitte erneut versuchen.', 'restocommerce'), 'Deine Sitzung ist abgelaufen. Lade die Seite neu und versuche es erneut.' => __('Deine Sitzung ist abgelaufen. Lade die Seite neu und versuche es erneut.', 'restocommerce'), 'Die Lizenzaktivierung konnte auf dieser Website nicht abgeschlossen werden. Bitte kontaktiere den Support.' => __('Die Lizenzaktivierung konnte auf dieser Website nicht abgeschlossen werden. Bitte kontaktiere den Support.', 'restocommerce'), 'Ungespeicherte Änderungen' => __('Ungespeicherte Änderungen', 'restocommerce'), 'Produkt konnte nicht geladen werden.' => __('Produkt konnte nicht geladen werden.', 'restocommerce'), 'Keine Angabe' => __('Keine Angabe', 'restocommerce'), 'Kennzeichnung prüfen' => __('Kennzeichnung prüfen', 'restocommerce'), 'Keine Altersgrenze' => __('Keine Altersgrenze', 'restocommerce'), 'Ab 16 Jahren' => __('Ab 16 Jahren', 'restocommerce'), 'Ab 18 Jahren' => __('Ab 18 Jahren', 'restocommerce'), 'Altersklasse prüfen' => __('Altersklasse prüfen', 'restocommerce'), 'KI prüft fehlende Altersklassen …' => __('KI prüft fehlende Altersklassen …', 'restocommerce'), 'Prüfung fehlgeschlagen.' => __('Prüfung fehlgeschlagen.', 'restocommerce'), 'Verbindung fehlgeschlagen. Bitte Seite neu laden und den gespeicherten Stand prüfen.' => __('Verbindung fehlgeschlagen. Bitte Seite neu laden und den gespeicherten Stand prüfen.', 'restocommerce'), 'JSON ungültig.' => __('JSON ungültig.', 'restocommerce'), ' · Kategorien: ' => __(' · Kategorien: ', 'restocommerce'), 'Vorschau fehlgeschlagen.' => __('Vorschau fehlgeschlagen.', 'restocommerce'), 'Korrekturen noch nicht gespeichert. Deine bisherigen Seitenbestätigungen bleiben erhalten.' => __('Korrekturen noch nicht gespeichert. Deine bisherigen Seitenbestätigungen bleiben erhalten.', 'restocommerce'), ' Seiten bestätigt' => __(' Seiten bestätigt', 'restocommerce'), ' · Auswertung: ' => __(' · Auswertung: ', 'restocommerce'), 'Extras' => __('Extras', 'restocommerce'), 'Seitenprüfung offen' => __('Seitenprüfung offen', 'restocommerce'), 'keine Angabe in der Auswertung' => __('keine Angabe in der Auswertung', 'restocommerce'), 'Bestätigen: Extras bei %d Artikeln ersetzen' => /* translators: %d: number of affected articles. */ __('Bestätigen: Extras bei %d Artikeln ersetzen', 'restocommerce'), 'Angelegt: %1$s, aktualisiert: %2$s, übersprungen: %3$s' => /* translators: 1: created count; 2: updated count; 3: skipped count. */ __('Angelegt: %1$s, aktualisiert: %2$s, übersprungen: %3$s', 'restocommerce'), ' · Kategorien aktiv: %s' => /* translators: %s: active category names. */ __(' · Kategorien aktiv: %s', 'restocommerce'), ' · Weiter zu Kategorien …' => __(' · Weiter zu Kategorien …', 'restocommerce'), 'Extras im Entwurf übernommen. Bitte speichern.' => __('Extras im Entwurf übernommen. Bitte speichern.', 'restocommerce'), 'Bitte die Seitenbestätigung mit „Änderungen speichern“ speichern.' => __('Bitte die Seitenbestätigung mit „Änderungen speichern“ speichern.', 'restocommerce'), 'Bitte zuerst die Quellseite auswählen.' => __('Bitte zuerst die Quellseite auswählen.', 'restocommerce'), ' Artikel geprüft und gespeichert. Bereit zum Anlegen.' => __(' Artikel geprüft und gespeichert. Bereit zum Anlegen.', 'restocommerce'), 'Entwurf gespeichert.' => __('Entwurf gespeichert.', 'restocommerce'), 'Weitergehen fehlgeschlagen. Der Entwurf ist gespeichert.' => __('Weitergehen fehlgeschlagen. Der Entwurf ist gespeichert.', 'restocommerce'), 'Speichern fehlgeschlagen. Deine Eingaben bleiben auf dieser Seite erhalten.' => __('Speichern fehlgeschlagen. Deine Eingaben bleiben auf dieser Seite erhalten.', 'restocommerce'), 'Lege Produkte an …' => __('Lege Produkte an …', 'restocommerce'), ', aktualisiert: ' => __(', aktualisiert: ', 'restocommerce'), ', übersprungen: ' => __(', übersprungen: ', 'restocommerce'), ' · Kategorien aktiv: ' => __(' · Kategorien aktiv: ', 'restocommerce'), ' · Weiter zu Kategorien …' => __(' · Weiter zu Kategorien …', 'restocommerce'), 'Import fehlgeschlagen.' => __('Import fehlgeschlagen.', 'restocommerce'), 'Produkte anlegen' => __('Produkte anlegen', 'restocommerce'), 'Schließe ab …' => __('Schließe ab …', 'restocommerce'), 'Einrichtung abgeschlossen.' => __('Einrichtung abgeschlossen.', 'restocommerce'), 'Noch nicht vollständig.' => __('Noch nicht vollständig.', 'restocommerce'), 'Einrichtung abschließen' => __('Einrichtung abschließen', 'restocommerce'), 'Fiskaly-Test erfolgreich.' => __('Fiskaly-Test erfolgreich.', 'restocommerce'), 'Erfolgreich angestoßen.' => __('Erfolgreich angestoßen.', 'restocommerce'), 'Testmail erfolgreich angestoßen.' => __('Testmail erfolgreich angestoßen.', 'restocommerce'), 'Testmail fehlgeschlagen.' => __('Testmail fehlgeschlagen.', 'restocommerce'), 'Neues Token erzeugen? Verbundene Geräte müssen es danach neu eintragen.' => __('Neues Token erzeugen? Verbundene Geräte müssen es danach neu eintragen.', 'restocommerce'), 'Neues Gerätetoken erzeugt.' => __('Neues Gerätetoken erzeugt.', 'restocommerce'), 'Token konnte nicht erzeugt werden.' => __('Token konnte nicht erzeugt werden.', 'restocommerce'), 'Kontingent aufgebraucht' => __('Kontingent aufgebraucht', 'restocommerce'), 'KI-Kontingent' => __('KI-Kontingent', 'restocommerce'), /* translators: %d: remaining AI allowance as a whole percentage. */ '%d %% verfügbar' => __('%d %% verfügbar', 'restocommerce'), 'Weniger als 1 % verfügbar' => __('Weniger als 1 % verfügbar', 'restocommerce'), 'Kontingent fast aufgebraucht' => __('Kontingent fast aufgebraucht', 'restocommerce'), 'Kontingent teilweise genutzt' => __('Kontingent teilweise genutzt', 'restocommerce'), 'Viel Kontingent verfügbar' => __('Viel Kontingent verfügbar', 'restocommerce'), 'Kontingent wird geprüft …' => __('Kontingent wird geprüft …', 'restocommerce'), 'Kontingent derzeit nicht abrufbar.' => __('Kontingent derzeit nicht abrufbar.', 'restocommerce'), 'Kontingent derzeit nicht abrufbar. Bitte Verbindung prüfen.' => __('Kontingent derzeit nicht abrufbar. Bitte Verbindung prüfen.', 'restocommerce'), 'Seiten werden erfasst …' => __('Seiten werden erfasst …', 'restocommerce'), ' Artikel' => __(' Artikel', 'restocommerce'), 'Auswertung fehlgeschlagen.' => __('Auswertung fehlgeschlagen.', 'restocommerce'), 'Verbindung unterbrochen. Mit „Auswertung fortsetzen“ den gespeicherten Stand abrufen. Es wird kein neuer Import gestartet.' => __('Verbindung unterbrochen. Mit „Auswertung fortsetzen“ den gespeicherten Stand abrufen. Es wird kein neuer Import gestartet.', 'restocommerce'), 'Mit AI auswerten' => __('Mit AI auswerten', 'restocommerce'), 'Gespeicherte Auswertung verlassen? Bereits reserviertes Kontingent bleibt berücksichtigt. Eine neue Auswertung benötigt erneut Kontingent.' => __('Gespeicherte Auswertung verlassen? Bereits reserviertes Kontingent bleibt berücksichtigt. Eine neue Auswertung benötigt erneut Kontingent.', 'restocommerce'), 'Bitte Datei wählen und neue Auswertung starten.' => __('Bitte Datei wählen und neue Auswertung starten.', 'restocommerce'), 'Bitte zuerst eine Speisekarten-Datei wählen.' => __('Bitte zuerst eine Speisekarten-Datei wählen.', 'restocommerce'), 'Datei wird vorbereitet …' => __('Datei wird vorbereitet …', 'restocommerce'), 'Start fehlgeschlagen.' => __('Start fehlgeschlagen.', 'restocommerce'), 'Der Import konnte nicht gestartet werden. Bitte Verbindung prüfen.' => __('Der Import konnte nicht gestartet werden. Bitte Verbindung prüfen.', 'restocommerce'), 'Datei konnte nicht gelesen werden.' => __('Datei konnte nicht gelesen werden.', 'restocommerce'), 'Kein JSON vorhanden.' => __('Kein JSON vorhanden.', 'restocommerce'), 'Bitte Allergen-Datei wählen.' => __('Bitte Allergen-Datei wählen.', 'restocommerce'), 'AI ordnet zu …' => __('AI ordnet zu …', 'restocommerce'), 'Allergene & Zusatzstoffe' => __('Allergene & Zusatzstoffe', 'restocommerce'), 'Allergen-AI fehlgeschlagen.' => __('Allergen-AI fehlgeschlagen.', 'restocommerce'), 'Zuordnungen erstellt – bitte prüfen.' => __('Zuordnungen erstellt – bitte prüfen.', 'restocommerce'), 'Mit AI zuordnen' => __('Mit AI zuordnen', 'restocommerce'), 'Keine Zeilen markiert.' => __('Keine Zeilen markiert.', 'restocommerce'), 'Übernommen.' => __('Übernommen.', 'restocommerce'), 'Übernahme fehlgeschlagen.' => __('Übernahme fehlgeschlagen.', 'restocommerce'), 'AI erzeugt …' => __('AI erzeugt …', 'restocommerce'), 'SEO-AI fehlgeschlagen.' => __('SEO-AI fehlgeschlagen.', 'restocommerce'), 'SEO-Texte erzeugt – bitte prüfen und speichern.' => __('SEO-Texte erzeugt – bitte prüfen und speichern.', 'restocommerce'), 'SEO & GEO mit AI optimieren' => __('SEO & GEO mit AI optimieren', 'restocommerce'), 'Zutaten' => __('Zutaten', 'restocommerce'), 'Steuern' => __('Steuern', 'restocommerce'), 'Der Kunde muss genau eine Auswahl treffen.' => __('Der Kunde muss genau eine Auswahl treffen.', 'restocommerce'), 'Alle Länder' => __('Alle Länder', 'restocommerce'), 'Ihre Speisekarte auf einen Blick.' => __('Ihre Speisekarte auf einen Blick.', 'restocommerce'), 'Unbenannter Entwurf' => __('Unbenannter Entwurf', 'restocommerce'), 'Keine aktive Größe' => __('Keine aktive Größe', 'restocommerce'), 'Größen' => __('Größen', 'restocommerce'), 'Steuer' => __('Steuer', 'restocommerce'), 'Pfand' => __('Pfand', 'restocommerce'), 'Verfügbarkeit' => __('Verfügbarkeit', 'restocommerce'), 'Neuer Artikel' => __('Neuer Artikel', 'restocommerce'), 'Bestehender Artikel. Typ und bisherige Auswahlregeln bleiben erhalten.' => __('Bestehender Artikel. Typ und bisherige Auswahlregeln bleiben erhalten.', 'restocommerce'), 'Artikel aktiv' => __('Artikel aktiv', 'restocommerce'), 'Für den Online-Shop vorgesehen' => __('Für den Online-Shop vorgesehen', 'restocommerce'), 'Für die Kasse vorgesehen' => __('Für die Kasse vorgesehen', 'restocommerce'), 'Einfach – ein Preis' => __('Einfach – ein Preis', 'restocommerce'), 'Mit Größen / Varianten' => __('Mit Größen / Varianten', 'restocommerce'), 'Vorhandene POS-Steuergruppe' => __('Vorhandene POS-Steuergruppe', 'restocommerce'), 'Getränke' => __('Getränke', 'restocommerce'), 'Kein Pfand' => __('Kein Pfand', 'restocommerce'), 'Elternwert übernehmen' => __('Elternwert übernehmen', 'restocommerce'), 'Kategorie' => __('Kategorie', 'restocommerce'), 'Bestand für diesen Artikel verwalten' => __('Bestand für diesen Artikel verwalten', 'restocommerce'), 'Verfügbare Stückzahl' => __('Verfügbare Stückzahl', 'restocommerce'), 'Verfügbar' => __('Verfügbar', 'restocommerce'), 'Zurzeit nicht verfügbar' => __('Zurzeit nicht verfügbar', 'restocommerce'), 'Neuer Eintrag' => __('Neuer Eintrag', 'restocommerce'), 'Kostenpflichtige Ergänzungen sind immer Extras.' => __('Kostenpflichtige Ergänzungen sind immer Extras.', 'restocommerce'), 'Keine' => __('Keine', 'restocommerce'), 'Online sichtbar' => __('Online sichtbar', 'restocommerce'), 'Im POS sichtbar' => __('Im POS sichtbar', 'restocommerce'), 'Eine Auswahl ist erforderlich' => __('Eine Auswahl ist erforderlich', 'restocommerce'), 'Mindestens so viele Extras auswählen' => __('Mindestens so viele Extras auswählen', 'restocommerce'), 'Höchstens so viele Extras auswählen' => __('Höchstens so viele Extras auswählen', 'restocommerce'), 'Mehrere Portionen desselben Extras erlauben' => __('Mehrere Portionen desselben Extras erlauben', 'restocommerce'), 'Entwurf gespeichert · noch nicht veröffentlicht' => __('Entwurf gespeichert · noch nicht veröffentlicht', 'restocommerce'), 'Entwurf konnte nicht gespeichert werden.' => __('Entwurf konnte nicht gespeichert werden.', 'restocommerce'), 'Entwurf wird noch gesichert. Bitte kurz warten.' => __('Entwurf wird noch gesichert. Bitte kurz warten.', 'restocommerce'), 'Wird gespeichert …' => __('Wird gespeichert …', 'restocommerce'), 'Speichern fehlgeschlagen. Ihre Eingaben bleiben erhalten.' => __('Speichern fehlgeschlagen. Ihre Eingaben bleiben erhalten.', 'restocommerce'), 'Bitte den laufenden Speichervorgang abwarten.' => __('Bitte den laufenden Speichervorgang abwarten.', 'restocommerce'), 'Die Bearbeitung schließen? Nicht gespeicherte Angaben bleiben nur im zuletzt gesicherten Entwurf.' => __('Die Bearbeitung schließen? Nicht gespeicherte Angaben bleiben nur im zuletzt gesicherten Entwurf.', 'restocommerce'), 'Der Typ bestehender Artikel bleibt erhalten.' => __('Der Typ bestehender Artikel bleibt erhalten.', 'restocommerce'), 'Die Vorlage kann nur in einer leeren Größenliste eingefügt werden.' => __('Die Vorlage kann nur in einer leeren Größenliste eingefügt werden.', 'restocommerce'), 'Groß' => __('Groß', 'restocommerce'), 'Kopie angelegt · noch nicht im Verkauf' => __('Kopie angelegt · noch nicht im Verkauf', 'restocommerce'), 'Entwurf wiederhergestellt' => __('Entwurf wiederhergestellt', 'restocommerce'), 'Bild auswählen' => __('Bild auswählen', 'restocommerce'), 'Bild verwenden' => __('Bild verwenden', 'restocommerce'), 'Die Aktion konnte nicht abgeschlossen werden.' => __('Die Aktion konnte nicht abgeschlossen werden.', 'restocommerce'), 'Die Speisekarte konnte nicht geladen werden.' => __('Die Speisekarte konnte nicht geladen werden.', 'restocommerce'), 'Feld nicht gefunden.' => __('Feld nicht gefunden.', 'restocommerce'), 'Installieren & aktivieren' => __('Installieren & aktivieren', 'restocommerce'), 'Installiert.' => __('Installiert.', 'restocommerce'), 'Theme aktiv.' => __('Theme aktiv.', 'restocommerce'), 'Produkte' => __('Produkte', 'restocommerce'), 'Kategorien' => __('Kategorien', 'restocommerce'), 'Extra-Gruppen' => __('Extra-Gruppen', 'restocommerce'), 'Neu anlegen' => __('Neu anlegen', 'restocommerce'), 'Inaktiv' => __('Inaktiv', 'restocommerce'), 'Einfach' => __('Einfach', 'restocommerce'), 'Standardsteuer' => __('Standardsteuer', 'restocommerce'), 'Basis' => __('Basis', 'restocommerce'), 'Aktionen' => __('Aktionen', 'restocommerce'), 'Produktname' => __('Produktname', 'restocommerce'), 'Produkttyp' => __('Produkttyp', 'restocommerce'), 'Aktiv' => __('Aktiv', 'restocommerce'), ' Mehrere Portionen je Extra sind möglich.' => __(' Mehrere Portionen je Extra sind möglich.', 'restocommerce'), 'Artikel ergänzt. Bitte die Vollständigkeit dieser Seite bestätigen und speichern.' => __('Artikel ergänzt. Bitte die Vollständigkeit dieser Seite bestätigen und speichern.', 'restocommerce'), 'Artikelname' => __('Artikelname', 'restocommerce'), 'Enthaltene Zutaten haben keinen Aufpreis. Kostenpflichtige Ergänzungen sind Extras.' => __('Enthaltene Zutaten haben keinen Aufpreis. Kostenpflichtige Ergänzungen sind Extras.', 'restocommerce'), 'Größe nach oben' => __('Größe nach oben', 'restocommerce'), 'Größe nach unten' => __('Größe nach unten', 'restocommerce'), 'Kategorie filtern' => __('Kategorie filtern', 'restocommerce'), 'Kennzeichnung bestätigt' => __('Kennzeichnung bestätigt', 'restocommerce'), 'Legenden und übergreifende Angaben werden gelesen …' => __('Legenden und übergreifende Angaben werden gelesen …', 'restocommerce'), 'Name der Größe' => __('Name der Größe', 'restocommerce'), 'OK' => __('OK', 'restocommerce'), 'Oberkategorie' => __('Oberkategorie', 'restocommerce'), 'Preis der Größe' => __('Preis der Größe', 'restocommerce'), 'Speisekarte' => __('Speisekarte', 'restocommerce'), 'Aktion' => __('Aktion', 'restocommerce'), 'Suchen' => __('Suchen', 'restocommerce'), 'ab' => __('ab', 'restocommerce'), 'suchen …' => __('suchen …', 'restocommerce'), 'muss' => __('muss', 'restocommerce'), 'kein Satz' => __('kein Satz', 'restocommerce'), 'kann' => __('kann', 'restocommerce'), 'bis' => __('bis', 'restocommerce'), 'Zusätzliche Auswahl' => __('Zusätzliche Auswahl', 'restocommerce'), 'Zusammengesetzt' => __('Zusammengesetzt', 'restocommerce'), 'Zum Beispiel 4,50' => __('Zum Beispiel 4,50', 'restocommerce'), 'Was gehört zum Gericht?' => __('Was gehört zum Gericht?', 'restocommerce'), 'Vorhandene Aktionen verwalten' => __('Vorhandene Aktionen verwalten', 'restocommerce'), 'Vorhandene Aktionen' => __('Vorhandene Aktionen', 'restocommerce'), 'V2-Vorschau' => __('V2-Vorschau', 'restocommerce'), 'Steuerprofil' => __('Steuerprofil', 'restocommerce'), 'Standard:' => __('Standard:', 'restocommerce'), 'Speisen' => __('Speisen', 'restocommerce'), 'Reihenfolge' => __('Reihenfolge', 'restocommerce'), 'Produktbild' => __('Produktbild', 'restocommerce'), 'Produktaktionen können zugeordnet werden. Globale und Kategorieaktionen gelten weiterhin nach ihren vorhandenen Regeln.' => __('Produktaktionen können zugeordnet werden. Globale und Kategorieaktionen gelten weiterhin nach ihren vorhandenen Regeln.', 'restocommerce'), 'Priorität' => __('Priorität', 'restocommerce'), 'Preis je Größe unterschiedlich' => __('Preis je Größe unterschiedlich', 'restocommerce'), 'Preis (€)' => __('Preis (€)', 'restocommerce'), 'Pfandvorlage' => __('Pfandvorlage', 'restocommerce'), 'POS' => __('POS', 'restocommerce'), 'Online' => __('Online', 'restocommerce'), 'Ohne Größenpreis gilt der Standardpreis. Ein leeres Preisfeld übernimmt den Standard; 0,00 € ist kostenlos.' => __('Ohne Größenpreis gilt der Standardpreis. Ein leeres Preisfeld übernimmt den Standard; 0,00 € ist kostenlos.', 'restocommerce'), 'Noch nicht im Verkauf. Alle Angaben bleiben in der Entwicklungsvorschau.' => __('Noch nicht im Verkauf. Alle Angaben bleiben in der Entwicklungsvorschau.', 'restocommerce'), 'Name' => __('Name', 'restocommerce'), 'Mittel' => __('Mittel', 'restocommerce'), 'Mit Größen' => __('Mit Größen', 'restocommerce'), 'Markieren Sie enthaltene Zutaten. „Abwählbar“ erlaubt dem Gast, diese Zutat kostenlos wegzulassen.' => __('Markieren Sie enthaltene Zutaten. „Abwählbar“ erlaubt dem Gast, diese Zutat kostenlos wegzulassen.', 'restocommerce'), 'Kurzbeschreibung (optional)' => __('Kurzbeschreibung (optional)', 'restocommerce'), 'Klein / Mittel / Groß' => __('Klein / Mittel / Groß', 'restocommerce'), 'Klein' => __('Klein', 'restocommerce'), 'Kategoriebild auswählen' => __('Kategoriebild auswählen', 'restocommerce'), 'Jede Größe hat ihren eigenen Preis. Es wird keine Größe vorausgewählt.' => __('Jede Größe hat ihren eigenen Preis. Es wird keine Größe vorausgewählt.', 'restocommerce'), 'Im Artikel wählen Sie die Steuerklasse und die vorhandene POS-Steuergruppe. Standortabhängige Regeln bleiben in der bestehenden Steuerkonfiguration.' => __('Im Artikel wählen Sie die Steuerklasse und die vorhandene POS-Steuergruppe. Standortabhängige Regeln bleiben in der bestehenden Steuerkonfiguration.', 'restocommerce'), 'Höchstens je Artikel' => __('Höchstens je Artikel', 'restocommerce'), 'Größe hinzufügen' => __('Größe hinzufügen', 'restocommerce'), 'Größe entfernen' => __('Größe entfernen', 'restocommerce'), 'Global' => __('Global', 'restocommerce'), 'Gespeicherte Entwürfe' => __('Gespeicherte Entwürfe', 'restocommerce'), 'Für dieses Profil ist kein Satz konfiguriert.' => __('Für dieses Profil ist kein Satz konfiguriert.', 'restocommerce'), 'Fassen Sie Extras zusammen und legen Sie die erlaubte Auswahl fest.' => __('Fassen Sie Extras zusammen und legen Sie die erlaubte Auswahl fest.', 'restocommerce'), 'Extras auswählen.' => __('Extras auswählen.', 'restocommerce'), 'Extra-Preise je Größe' => __('Extra-Preise je Größe', 'restocommerce'), 'Es werden ausschließlich vorhandene Pfandvorlagen verwendet.' => __('Es werden ausschließlich vorhandene Pfandvorlagen verwendet.', 'restocommerce'), 'Es sind noch keine Aktionen eingerichtet.' => __('Es sind noch keine Aktionen eingerichtet.', 'restocommerce'), 'Entwicklungsvorschau für Abholung · Bestellen noch gesperrt' => __('Entwicklungsvorschau für Abholung · Bestellen noch gesperrt', 'restocommerce'), 'Empfehlung: 1600 × 900 px, 16:9, JPG oder WebP.' => __('Empfehlung: 1600 × 900 px, 16:9, JPG oder WebP.', 'restocommerce'), 'Empfehlung: 1200 × 1200 px, quadratisch, JPG oder WebP.' => __('Empfehlung: 1200 × 1200 px, quadratisch, JPG oder WebP.', 'restocommerce'), 'Duplizieren' => __('Duplizieren', 'restocommerce'), 'Die vorhandene Lagerlogik bleibt die Grundlage. Neue Artikel bleiben in dieser Vorschau außerhalb des Verkaufs.' => __('Die vorhandene Lagerlogik bleibt die Grundlage. Neue Artikel bleiben in dieser Vorschau außerhalb des Verkaufs.', 'restocommerce'), 'Die Sätze stammen aus Ihrer bestehenden Konfiguration. Standort- und Serviceregeln bleiben maßgeblich.' => __('Die Sätze stammen aus Ihrer bestehenden Konfiguration. Standort- und Serviceregeln bleiben maßgeblich.', 'restocommerce'), 'Der Kunde' => __('Der Kunde', 'restocommerce'), 'Bisherige Verwaltung öffnen' => __('Bisherige Verwaltung öffnen', 'restocommerce'), 'Bestehende Regeln' => __('Bestehende Regeln', 'restocommerce'), 'Beschreibung' => __('Beschreibung', 'restocommerce'), 'Artikelnummer (optional)' => __('Artikelnummer (optional)', 'restocommerce'), 'Artikelbereiche' => __('Artikelbereiche', 'restocommerce'), 'Ansehen' => __('Ansehen', 'restocommerce'), 'Alle Kategorien' => __('Alle Kategorien', 'restocommerce'), 'Alkohol' => __('Alkohol', 'restocommerce'), 'Abwählbar' => __('Abwählbar', 'restocommerce'), '(inaktiv)' => __('(inaktiv)', 'restocommerce'), '← Zur Übersicht' => __('← Zur Übersicht', 'restocommerce'), 'Legen Sie einen Eintrag an oder passen Sie die Suche an.' => __('Legen Sie einen Eintrag an oder passen Sie die Suche an.', 'restocommerce'), 'Hier ist Platz für Neues.' => __('Hier ist Platz für Neues.', 'restocommerce'), 'Artikel speichern' => __('Artikel speichern', 'restocommerce'), 'Technische Verwaltungsansicht · keine Verkaufsfreigabe' => __('Technische Verwaltungsansicht · keine Verkaufsfreigabe', 'restocommerce'), 'Catalog V2 Vorschau' => __('Catalog V2 Vorschau', 'restocommerce'), 'Steuerkonfiguration öffnen' => __('Steuerkonfiguration öffnen', 'restocommerce'), 'Die tatsächlich konfigurierten Steuerklassen. Keine automatisch angenommenen Sätze.' => __('Die tatsächlich konfigurierten Steuerklassen. Keine automatisch angenommenen Sätze.', 'restocommerce'), 'Neue Artikel bleiben bis zur späteren Verkaufsfreigabe außerhalb der Kasse und des Shops.' => __('Neue Artikel bleiben bis zur späteren Verkaufsfreigabe außerhalb der Kasse und des Shops.', 'restocommerce'), 'Entwicklungsvorschau' => __('Entwicklungsvorschau', 'restocommerce'), 'Gute Gerichte. Klar organisiert.' => __('Gute Gerichte. Klar organisiert.', 'restocommerce'), 'Produkte suchen...' => __('Produkte suchen...', 'restocommerce'), 'Bitte wähle zuerst deine Zahlungsart aus.' => __('Bitte wähle zuerst deine Zahlungsart aus.', 'restocommerce'), 'Bitte wähle eine Zahlungsart aus.' => __('Bitte wähle eine Zahlungsart aus.', 'restocommerce'), 'Unbenannte Größe' => __('Unbenannte Größe', 'restocommerce'), 'Varianten / Größen' => __('Varianten / Größen', 'restocommerce'), 'Zutat nach oben' => __('Zutat nach oben', 'restocommerce'), ]; if (!$admin) { return $common + [ 'pickup' => __('Abholung', 'restocommerce'), 'delivery' => __('Lieferung', 'restocommerce'), 'add_to_cart' => __('In den Warenkorb', 'restocommerce'), 'Abholung' => __('Abholung', 'restocommerce'), 'Lieferung' => __('Lieferung', 'restocommerce'), 'In den Warenkorb' => __('In den Warenkorb', 'restocommerce'), 'Wird gespeichert...' => __('Wird gespeichert...', 'restocommerce'), 'Fehler beim Speichern.' => __('Fehler beim Speichern.', 'restocommerce'), 'Fehler beim Speichern. Bitte versuche es erneut.' => __('Fehler beim Speichern. Bitte versuche es erneut.', 'restocommerce'), 'Bitte gib eine Lieferadresse ein.' => __('Bitte gib eine Lieferadresse ein.', 'restocommerce'), 'Die eingegebene Adresse liegt nicht im Liefergebiet.' => __('Die eingegebene Adresse liegt nicht im Liefergebiet.', 'restocommerce'), 'Wähle eine verfügbare Abholzeit' => __('Wähle eine verfügbare Abholzeit', 'restocommerce'), 'Abholtag wählen...' => __('Abholtag wählen...', 'restocommerce'), 'Bitte Uhrzeit wählen...' => __('Bitte Uhrzeit wählen...', 'restocommerce'), 'Abholzeit' => __('Abholzeit', 'restocommerce'), 'Abholtag' => __('Abholtag', 'restocommerce'), 'Abholdatum' => __('Abholdatum', 'restocommerce'), 'Abholdatum (optional)' => __('Abholdatum (optional)', 'restocommerce'), 'Abholzeit (optional)' => __('Abholzeit (optional)', 'restocommerce'), 'Zusätzliche Informationen zur Bestellung' => __('Zusätzliche Informationen zur Bestellung', 'restocommerce'), 'Zusätzliche Informationen' => __('Zusätzliche Informationen', 'restocommerce'), 'Lade Zeiten…' => __('Lade Zeiten…', 'restocommerce'), 'Lade Tage…' => __('Lade Tage…', 'restocommerce'), 'Keine Tage verfügbar' => __('Keine Tage verfügbar', 'restocommerce'), 'Keine Zeiten verfügbar' => __('Keine Zeiten verfügbar', 'restocommerce'), 'Hinzufügen' => __('Hinzufügen', 'restocommerce'), 'Extras anzeigen' => __('Extras anzeigen', 'restocommerce'), 'Extras ausblenden' => __('Extras ausblenden', 'restocommerce'), 'Variante #' => __('Variante #', 'restocommerce'), 'Bitte eine Variante wählen.' => __('Bitte eine Variante wählen.', 'restocommerce'), 'Noch' => __('Noch', 'restocommerce'), 'Ausverkauft' => __('Ausverkauft', 'restocommerce'), 'Pfand' => __('Pfand', 'restocommerce'), ]; } return $common + [ 'language' => __('Sprache', 'restocommerce'), 'confirm' => __('Bestätigen', 'restocommerce'), 'delete' => __('Löschen', 'restocommerce'), 'Sprache' => __('Sprache', 'restocommerce'), 'Bestätigen' => __('Bestätigen', 'restocommerce'), 'Einstellungen gespeichert.' => __('Einstellungen gespeichert.', 'restocommerce'), 'Ein unbekannter Fehler ist aufgetreten.' => __('Ein unbekannter Fehler ist aufgetreten.', 'restocommerce'), 'Speichern…' => __('Speichern…', 'restocommerce'), 'Request failed' => __('Request failed', 'restocommerce'), 'Aktiv' => __('Aktiv', 'restocommerce'), 'Abholung' => __('Abholung', 'restocommerce'), 'Lieferung' => __('Lieferung', 'restocommerce'), 'Vor Ort' => __('Vor Ort', 'restocommerce'), 'Standard' => __('Standard', 'restocommerce'), 'Ziehen zum Sortieren' => __('Ziehen zum Sortieren', 'restocommerce'), 'Bearbeiten' => __('Bearbeiten', 'restocommerce'), 'Technische ID:' => __('Technische ID:', 'restocommerce'), 'Allgemeiner Titel' => __('Allgemeiner Titel', 'restocommerce'), 'Allgemeine Beschreibung' => __('Allgemeine Beschreibung', 'restocommerce'), 'Titel Abholung' => __('Titel Abholung', 'restocommerce'), 'Beschreibung Abholung' => __('Beschreibung Abholung', 'restocommerce'), 'Titel Lieferung' => __('Titel Lieferung', 'restocommerce'), 'Beschreibung Lieferung' => __('Beschreibung Lieferung', 'restocommerce'), 'Titel Vor Ort' => __('Titel Vor Ort', 'restocommerce'), 'Beschreibung Vor Ort' => __('Beschreibung Vor Ort', 'restocommerce'), 'Icon (optional)' => __('Icon (optional)', 'restocommerce'), 'Interne Notiz' => __('Interne Notiz', 'restocommerce'), 'Gespeichert' => __('Gespeichert', 'restocommerce'), 'Speichern fehlgeschlagen' => __('Speichern fehlgeschlagen', 'restocommerce'), 'Laden fehlgeschlagen' => __('Laden fehlgeschlagen', 'restocommerce'), ]; } } RC_Interface::boot();