Add German front-office translations

The German language pack leaves ~180 shop strings in English (search
bar, cart, room cards, footer, account menu). docker/apply-translations.php
fills only missing keys from docker/translations-de-front.php and fixes
English values in the theme language file; docker/find-missing-translations.php
lists remaining gaps. Module/theme de.php files are git-ignored upstream
(downloaded on install), so the script is re-run after each install.
Also includes the language-pack updates the installer wrote to the
tracked module de.php files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
DanielS
2026-11-11 00:33:32 +01:00
parent c76dd44f16
commit 8434d950dd
9 changed files with 405 additions and 0 deletions

View File

@@ -9,6 +9,10 @@
# --timezone=Europe/Berlin --domain=localhost:8080 --db_server=db --db_user=qloapps \ # --timezone=Europe/Berlin --domain=localhost:8080 --db_server=db --db_user=qloapps \
# --db_password=<DB_PASSWORD> --db_name=qloapps --email=<ADMIN_EMAIL> --password=<ADMIN_PASSWORD> \ # --db_password=<DB_PASSWORD> --db_name=qloapps --email=<ADMIN_EMAIL> --password=<ADMIN_PASSWORD> \
# --newsletter=0 # --newsletter=0
#
# Then (as www-data): fill German front-office gaps and load the Wasserrad demo content:
# docker compose exec -u www-data app php docker/apply-translations.php de
# docker compose exec -u www-data app php docker/seed-wasserrad-demo.php
services: services:
app: app:

View File

@@ -0,0 +1,74 @@
<?php
/**
* Writes missing front-office translations into modules/<module>/translations/<iso>.php.
* Usage: docker compose exec -u www-data app php docker/apply-translations.php [iso]
* Reads the dictionary docker/translations-<iso>-front.php (English => target language)
* and only fills keys that are missing; existing translations are never overwritten.
*/
if (PHP_SAPI !== 'cli') {
exit;
}
$iso = isset($argv[1]) ? $argv[1] : 'de';
$root = realpath(__DIR__.'/..');
$dict = require __DIR__.'/translations-'.$iso.'-front.php';
$json = shell_exec('php '.escapeshellarg(__DIR__.'/find-missing-translations.php').' '.escapeshellarg($iso).' 2>/dev/null');
$missing = json_decode($json, true);
if (!is_array($missing)) {
fwrite(STDERR, "Could not read missing translations\n");
exit(1);
}
$added = 0;
$untranslated = array();
foreach ($missing['modules'] as $mod => $entries) {
$lines = array();
foreach ($entries as $key => $english) {
if (!isset($dict[$english])) {
$untranslated[$mod][] = $english;
continue;
}
$lines[] = '$_MODULE['.var_export($key, true).'] = '.var_export($dict[$english], true).';';
}
if (!$lines) {
continue;
}
$file = $root.'/modules/'.$mod.'/translations/'.$iso.'.php';
if (!is_file($file)) {
@mkdir(dirname($file), 0755, true);
file_put_contents($file, "<?php\n\nglobal \$_MODULE;\n\$_MODULE = array();\n");
}
$content = rtrim(file_get_contents($file));
if (substr($content, -2) === '?>') {
$content = rtrim(substr($content, 0, -2));
}
// Some language-pack files end with "return $_MODULE;" - new lines must go before it.
$hasReturn = (bool)preg_match('/\n\s*return \$_MODULE;\s*$/', $content);
if ($hasReturn) {
$content = rtrim(preg_replace('/\n\s*return \$_MODULE;\s*$/', '', $content));
}
$content .= "\n\n// Added by docker/apply-translations.php\n".implode("\n", $lines)."\n";
if ($hasReturn) {
$content .= "\nreturn \$_MODULE;\n";
}
file_put_contents($file, $content);
$added += count($lines);
echo sprintf(" %-26s +%d\n", $mod, count($lines));
}
// Theme strings the language pack "translates" with English text: replace those values.
$themeFixes = isset($dict['__theme_value_fixes']) ? $dict['__theme_value_fixes'] : array();
$themeFile = $root.'/themes/hotel-reservation-theme/lang/'.$iso.'.php';
if ($themeFixes && is_file($themeFile)) {
$c = file_get_contents($themeFile);
$n = 0;
foreach ($themeFixes as $from => $to) {
$c = str_replace('= '.var_export($from, true).';', '= '.var_export($to, true).';', $c, $count);
$n += $count;
}
file_put_contents($themeFile, $c);
echo " theme lang fixes $n\n";
}
echo "Added $added translations.\n";
$skip = array_sum(array_map('count', $untranslated));
echo "Not in dictionary: $skip (mostly back-office modules)\n";

View File

@@ -0,0 +1,89 @@
<?php
/**
* Lists front-office strings without a translation for the given language.
* Usage: docker compose exec -u www-data app php docker/find-missing-translations.php [iso] > missing.json
* Scans theme templates and the front templates of active front modules.
*/
if (PHP_SAPI !== 'cli') {
exit;
}
$iso = isset($argv[1]) ? $argv[1] : 'de';
$root = realpath(__DIR__.'/..');
$theme = $root.'/themes/hotel-reservation-theme';
$_LANG = array();
include $theme.'/lang/'.$iso.'.php';
$themeLang = $_LANG;
$re = '/\{l\s+s=(?:\'((?:[^\'\\\\]|\\\\.)*)\'|"((?:[^"\\\\]|\\\\.)*)")(?:\s+mod=[\'"]([\w-]+)[\'"])?[^}]*\}/';
$out = array('theme' => array(), 'modules' => array());
$moduleLangCache = array();
$moduleLang = function ($mod) use (&$moduleLangCache, $root, $theme, $iso) {
if (!isset($moduleLangCache[$mod])) {
$_MODULE = array();
foreach (array($root.'/modules/'.$mod.'/translations/'.$iso.'.php', $theme.'/modules/'.$mod.'/translations/'.$iso.'.php') as $f) {
if (is_file($f)) {
include $f;
}
}
$moduleLangCache[$mod] = $_MODULE;
}
return $moduleLangCache[$mod];
};
$files = array();
$it = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($theme, FilesystemIterator::SKIP_DOTS));
foreach ($it as $f) {
if (substr($f, -4) === '.tpl' && strpos($f, '/mobile/') === false && strpos($f, '/pdf/') === false) {
$files[] = (string)$f;
}
}
// older modules keep front templates in the module root
foreach (glob($root.'/modules/*/*.tpl') as $f) {
$files[] = $f;
}
foreach (glob($root.'/modules/*/views/templates/{hook,front}/*.tpl', GLOB_BRACE) as $f) {
$files[] = $f;
}
foreach (glob($root.'/modules/*/views/templates/{hook,front}/*/*.tpl', GLOB_BRACE) as $f) {
$files[] = $f;
}
foreach ($files as $file) {
$src = file_get_contents($file);
if (!preg_match_all($re, $src, $m, PREG_SET_ORDER)) {
continue;
}
$base = basename($file, '.tpl');
foreach ($m as $match) {
$string = $match[1] !== '' ? $match[1] : (isset($match[2]) ? $match[2] : '');
$string = stripslashes($string);
$mod = isset($match[3]) ? $match[3] : '';
$md5 = md5(str_replace('\'', '\\\'', $string));
if ($mod === '' && strpos($file, '/modules/') === false || $mod === '' && strpos($file, $theme) === 0 && strpos($file, $theme.'/modules/') === false) {
$key = $base.'_'.$md5;
if (empty($themeLang[$key])) {
$out['theme'][$key] = $string;
}
} else {
if ($mod === '') {
preg_match('#/modules/([\w-]+)/#', $file, $mm);
$mod = $mm[1];
}
$lang = $moduleLang($mod);
$md5m = md5($string);
$k1 = strtolower('<{'.$mod.'}hotel-reservation-theme>'.$base).'_'.$md5m;
$k2 = strtolower('<{'.$mod.'}prestashop>'.$base).'_'.$md5m;
if (empty($lang[$k1]) && empty($lang[$k2])) {
$out['modules'][$mod][$k2] = $string;
}
}
}
}
$counts = array('theme' => count($out['theme']));
foreach ($out['modules'] as $mod => $s) {
$counts[$mod] = count($s);
}
fwrite(STDERR, json_encode($counts, JSON_PRETTY_PRINT).PHP_EOL);
echo json_encode($out, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

View File

@@ -0,0 +1,201 @@
<?php
/**
* German translations for front-office strings that the official language pack leaves in English.
* Applied by docker/apply-translations.php. English source string => German.
*/
return array(
// shared
'View Details' => 'Details ansehen',
'Your' => 'Ihre',
'bookings have' => 'Buchungen wurden',
'booking has' => 'Buchung wurde',
'been created successfully!' => 'erfolgreich angelegt!',
"If the client chooses to pay by bank wire, the order's status will change to 'Waiting for Payment.'" => "Wählt der Gast Banküberweisung, wechselt der Status der Buchung auf „Zahlung ausstehend“.",
"Please confirm your order by clicking 'I confirm my order'" => "Bitte bestätigen Sie Ihre Buchung mit „Ich bestätige meine Buchung“.",
'I confirm my order' => 'Ich bestätige meine Buchung',
"If the client chooses this payment method, the order status will change to 'Waiting for payment.'" => "Wählt der Gast diese Zahlungsart, wechselt der Status der Buchung auf „Zahlung ausstehend“.",
// blockcart
'View my booking cart' => 'Meine Buchungsauswahl ansehen',
'Cart' => 'Warenkorb',
'Rooms' => 'Zimmer',
'No products' => 'Keine Zimmer ausgewählt',
'Delete' => 'Löschen',
'To be determined' => 'Wird noch ermittelt',
'Free shipping!' => 'Kostenloser Versand!',
'Shipping' => 'Versand',
'Wrapping' => 'Verpackung',
'Room and Service Tax' => 'Steuern auf Zimmer und Leistungen',
'Total Tourism Tax' => 'Kurtaxe gesamt',
'Total Taxes' => 'Steuern gesamt',
'Convenience Fees' => 'Servicegebühren',
'Total' => 'Gesamt',
'Prices are tax included' => 'Preise inkl. MwSt.',
'Prices are tax excluded' => 'Preise zzgl. MwSt.',
'Check out' => 'Zur Kasse',
'Close window' => 'Fenster schließen',
'Room successfully added to your cart' => 'Zimmer wurde zu Ihrer Buchung hinzugefügt',
'Product successfully added to your cart' => 'Leistung wurde zu Ihrer Buchung hinzugefügt',
'Time Duration' => 'Zeitraum',
'Property Name' => 'Unterkunft',
'Unit Price' => 'Einzelpreis',
'Room occupancy' => 'Belegung',
'Rooms quantity added' => 'Anzahl hinzugefügter Zimmer',
'Quantity' => 'Menge',
'Room type cost' => 'Zimmerpreis',
'There are [1]%d[/1] item(s) in your cart.' => 'Ihre Buchung enthält [1]%d[/1] Positionen.',
'1 item in your cart.' => 'Ihre Buchung enthält 1 Position.',
'Total Rooms Cost in cart' => 'Zimmerpreis gesamt',
'(tax excl.)' => '(zzgl. MwSt.)',
'(tax incl.)' => '(inkl. MwSt.)',
'Total Product Cost in cart' => 'Leistungen gesamt',
'Total shipping' => 'Versand gesamt',
'Continue browsing' => 'Weiter stöbern',
'Proceed to checkout' => 'Zur Kasse',
'Some Error occurred.Please try again.' => 'Es ist ein Fehler aufgetreten. Bitte versuchen Sie es erneut.',
'Customization #' => 'Anpassung #',
'remove this product from my cart' => 'diese Leistung aus meiner Buchung entfernen',
'Free!' => 'Kostenlos!',
'Adults' => 'Erwachsene',
'Children' => 'Kinder',
'Price' => 'Preis',
'Total Qty.' => 'Menge gesamt',
'Variant' => 'Variante',
'Qty' => 'Menge',
'Duration' => 'Dauer',
'Capacity' => 'Kapazität',
'Remove this room from my cart' => 'Dieses Zimmer aus meiner Buchung entfernen',
'No internet. Please check your internet connection.' => 'Keine Internetverbindung. Bitte prüfen Sie Ihre Verbindung.',
'Product detail' => 'Details',
'Qty.' => 'Menge',
'Remove' => 'Entfernen',
'remove this room from my cart' => 'dieses Zimmer aus meiner Buchung entfernen',
'Customization #%d:' => 'Anpassung #%d:',
'Customers who bought this product also bought:' => 'Gäste buchten außerdem:',
// blockmyaccount / blockuserinfo
'My account' => 'Mein Konto',
'My orders' => 'Meine Buchungen',
'My merchandise returns' => 'Meine Rücksendungen',
'My credit slips' => 'Meine Gutschriften',
'My personal info' => 'Meine persönlichen Daten',
'My vouchers' => 'Meine Gutscheine',
'Sign out' => 'Abmelden',
'Accounts' => 'Konto',
'Bookings' => 'Buchungen',
'Logout' => 'Abmelden',
'View my customer account' => 'Mein Kundenkonto ansehen',
'Accounts Settings' => 'Kontoeinstellungen',
'Log me out' => 'Abmelden',
'Sign Out' => 'Abmelden',
'Log in to your customer account' => 'Zu Ihrem Kundenkonto anmelden',
'Sign in' => 'Anmelden',
// blocknewsletter
'GET NOTIFICATIONS' => 'NEUIGKEITEN ERHALTEN',
'Your email address' => 'Ihre E-Mail-Adresse',
'Subscribe' => 'Anmelden',
'No internet. Please try later.' => 'Keine Internetverbindung. Bitte versuchen Sie es später.',
'You have unsubscribed successfully.' => 'Sie haben sich erfolgreich abgemeldet.',
'You will be redirected to home page in ' => 'Sie werden weitergeleitet zur Startseite in ',
'seconds.' => 'Sekunden.',
'Home Page' => 'Startseite',
'Thank you for subscribing to our newsletter.' => 'Vielen Dank für Ihre Anmeldung zu unserem Newsletter.',
// blocksocial / blocknavigationmenu / blockcurrencies
'Follow us on' => 'Folgen Sie uns',
'Explore' => 'Entdecken',
'%s (%s)' => '%s (%s)',
// hotelreservationsystem
'Cancelled' => 'Storniert',
'Refunded' => 'Erstattet',
'Denied' => 'Abgelehnt',
'Refunded amount' => 'Erstatteter Betrag',
'Payment mode' => 'Zahlungsart',
'Transaction ID' => 'Transaktions-ID',
'Voucher' => 'Gutschein',
'Credit Slip' => 'Gutschrift',
' All rights reserved. | Powered by' => ' Alle Rechte vorbehalten. | Betrieben mit',
'All rights reserved' => 'Alle Rechte vorbehalten',
'Call Us : ' => 'Telefon: ',
'Email : ' => 'E-Mail: ',
'Directions' => 'Anfahrt',
// qlohotelreview
'Allowed formats are: .jpg, .jpeg, .png' => 'Erlaubte Formate: .jpg, .jpeg, .png',
'Sum up your review' => 'Fassen Sie Ihre Bewertung zusammen',
'Type here...' => 'Hier schreiben …',
' people found it helpful.' => ' Personen fanden das hilfreich.',
// qlopaypalcommerce
'Pay using Paypal payment options.' => 'Mit den Zahlungsarten von PayPal bezahlen.',
'Pay using Paypal' => 'Mit PayPal bezahlen',
'Please wait...' => 'Bitte warten …',
'You have cancelled payment by PayPal. You can retry with PayPal or try a different payment method.' => 'Sie haben die Zahlung mit PayPal abgebrochen. Versuchen Sie es erneut oder wählen Sie eine andere Zahlungsart.',
'Your order on %s is complete.' => 'Ihre Buchung bei %s ist abgeschlossen.',
'Total Amount Paid' => 'Bezahlter Gesamtbetrag',
'An email has been sent with this information.' => 'Sie erhalten diese Informationen auch per E-Mail.',
'Your order will be sent as soon as possible.' => 'Ihre Buchung wird schnellstmöglich bearbeitet.',
'If you have questions, comments or concerns, please contact our' => 'Bei Fragen, Anmerkungen oder Anliegen wenden Sie sich bitte an unser',
'expert customer support team' => 'Service-Team',
'We noticed a problem with your payment. Please contact our' => 'Bei Ihrer Zahlung ist ein Problem aufgetreten. Bitte wenden Sie sich an unser',
'Your payment has been failed due to following reason:' => 'Ihre Zahlung ist aus folgendem Grund fehlgeschlagen:',
'Error:' => 'Fehler:',
'Error Description:' => 'Fehlerbeschreibung:',
'Other payment methods' => 'Andere Zahlungsarten',
// home blocks
'Interior' => 'Ambiente',
'payment accepted' => 'Zahlungsarten',
'Amenities' => 'Ausstattung',
'Testimonials' => 'Gästestimmen',
// wkhotelfilterblock
'Filters' => 'Filter',
'Clear all' => 'Alle zurücksetzen',
'Clear Filter' => 'Filter zurücksetzen',
'Apply' => 'Anwenden',
'Sort' => 'Sortieren',
'Sort by' => 'Sortieren nach',
'Filter' => 'Filter',
'View More' => 'Mehr anzeigen',
'Book Now' => 'Jetzt buchen',
// wkhotelroom
'night' => 'Nacht',
'Book now' => 'Jetzt buchen',
'View' => 'Ansehen',
'Our Rooms' => 'Unsere Zimmer',
// wkroomsearchblock
'Searched results for' => 'Suchergebnisse für',
'Days' => 'Tage',
'Nights' => 'Nächte',
'Night' => 'Nacht',
'Search Rooms' => 'Zimmer suchen',
'Make Booking' => 'Jetzt buchen',
'Modify Search' => 'Suche ändern',
'Property Location' => 'Ort',
'Select Property' => 'Unterkunft wählen',
'Check-in' => 'Anreise',
'Check-out' => 'Abreise',
'Check-in - Check-out' => 'Anreise – Abreise',
'Adult' => 'Erwachsener',
'Child' => 'Kind',
'Room' => 'Zimmer',
'1 Adult, 1 Room' => '1 Erwachsener, 1 Zimmer',
'Below' => 'Unter',
'years' => 'Jahre',
'All Children' => 'Alle Kinder',
'Select 1' => 'Alter wählen',
'Under 1' => 'Unter 1',
'Room - 1' => 'Zimmer – 1',
'Add Room' => 'Zimmer hinzufügen',
'Done' => 'Fertig',
// values in themes/hotel-reservation-theme/lang/de.php that the language pack left in English
'__theme_value_fixes' => array(
'Check-In - Check-Out' => 'Anreise – Abreise',
),
);

View File

@@ -59,3 +59,10 @@ $_MODULE['<{bankwire}prestashop>mail_template_text_6702a6e3bc2dce95c3e3b61fe578f
$_MODULE['<{bankwire}prestashop>mail_template_text_21e4851289ecc91b65023c2563344aa7'] = 'Kontoinhaber:'; $_MODULE['<{bankwire}prestashop>mail_template_text_21e4851289ecc91b65023c2563344aa7'] = 'Kontoinhaber:';
$_MODULE['<{bankwire}prestashop>mail_template_text_20a650d87733bd5895c979de29864a73'] = 'Kontodetails:'; $_MODULE['<{bankwire}prestashop>mail_template_text_20a650d87733bd5895c979de29864a73'] = 'Kontodetails:';
$_MODULE['<{bankwire}prestashop>mail_template_text_312d898d92d8ba90499ef0dac27270be'] = 'Bankadresse:'; $_MODULE['<{bankwire}prestashop>mail_template_text_312d898d92d8ba90499ef0dac27270be'] = 'Bankadresse:';
// Added by docker/apply-translations.php
$_MODULE['<{bankwire}prestashop>payment_return_4ff70f7b2e5a74415de360150a6e59d3'] = 'Ihre';
$_MODULE['<{bankwire}prestashop>payment_return_b020dd24318376f939f91f8fcb7266f6'] = 'Buchungen wurden';
$_MODULE['<{bankwire}prestashop>payment_return_642b829e2ed9b9fece9b1d810bbc0f3b'] = 'Buchung wurde';
$_MODULE['<{bankwire}prestashop>payment_return_659623af9479cd8813485e4e4a5a96c3'] = 'erfolgreich angelegt!';
$_MODULE['<{bankwire}prestashop>infos_4b316ae03d310dab57ae13629736443b'] = 'Wählt der Gast Banküberweisung, wechselt der Status der Buchung auf „Zahlung ausstehend“.';

View File

@@ -35,5 +35,7 @@ $_MODULE['<{blocksocial}prestashop>blocksocial_55f015a0c5605702f913536afe70cfb0'
$_MODULE['<{blocksocial}prestashop>blocksocial_970cfba66b8380fb97b742e4571356c6'] = 'YouTube'; $_MODULE['<{blocksocial}prestashop>blocksocial_970cfba66b8380fb97b742e4571356c6'] = 'YouTube';
$_MODULE['<{blocksocial}prestashop>blocksocial_dda8dc38128a8c843ba9f496d6ee7186'] = 'Google Plus'; $_MODULE['<{blocksocial}prestashop>blocksocial_dda8dc38128a8c843ba9f496d6ee7186'] = 'Google Plus';
// Added by docker/apply-translations.php
$_MODULE['<{blocksocial}prestashop>blocksocial_738bc5faa88e6b0fa0e7e3385d7e4ee3'] = 'Folgen Sie uns';
return $_MODULE; return $_MODULE;

View File

@@ -23,5 +23,18 @@ $_MODULE['<{blockuserinfo}prestashop>nav_c87aacf5673fada1108c9f809d354311'] = 'A
$_MODULE['<{blockuserinfo}prestashop>nav_d4151a9a3959bdd43690735737034f27'] = 'Anmelden zu Ihrem Kundenbereich'; $_MODULE['<{blockuserinfo}prestashop>nav_d4151a9a3959bdd43690735737034f27'] = 'Anmelden zu Ihrem Kundenbereich';
$_MODULE['<{blockuserinfo}prestashop>nav_b6d4223e60986fa4c9af77ee5f7149c5'] = 'Anmelden'; $_MODULE['<{blockuserinfo}prestashop>nav_b6d4223e60986fa4c9af77ee5f7149c5'] = 'Anmelden';
// Added by docker/apply-translations.php
$_MODULE['<{blockuserinfo}prestashop>nav_9b945efebb006547a94415eadaa12921'] = 'Konto';
$_MODULE['<{blockuserinfo}prestashop>nav_a35529bfcfdfab2dc01946af64cd2ce4'] = 'Buchungen';
$_MODULE['<{blockuserinfo}prestashop>nav_0323de4f66a1700e2173e9bcdce02715'] = 'Abmelden';
// Added by docker/apply-translations.php
$_MODULE['<{blockuserinfo}prestashop>nav-xs_a35529bfcfdfab2dc01946af64cd2ce4'] = 'Buchungen';
$_MODULE['<{blockuserinfo}prestashop>nav-xs_2cbfb6731610056e1d0aaacde07096c1'] = 'Mein Kundenkonto ansehen';
$_MODULE['<{blockuserinfo}prestashop>nav-xs_802ae618edcbffbf50f9a0a69d358452'] = 'Kontoeinstellungen';
$_MODULE['<{blockuserinfo}prestashop>nav-xs_4b877ba8588b19f1b278510bf2b57ebb'] = 'Abmelden';
$_MODULE['<{blockuserinfo}prestashop>nav-xs_375e08625a2c38089b9e3a60f0e68325'] = 'Abmelden';
$_MODULE['<{blockuserinfo}prestashop>nav-xs_d4151a9a3959bdd43690735737034f27'] = 'Zu Ihrem Kundenkonto anmelden';
$_MODULE['<{blockuserinfo}prestashop>nav-xs_b6d4223e60986fa4c9af77ee5f7149c5'] = 'Anmelden';
return $_MODULE; return $_MODULE;

View File

@@ -53,3 +53,12 @@ $_MODULE['<{cheque}prestashop>mail_template_text_b6592595266708e46d1d420ab715321
$_MODULE['<{cheque}prestashop>mail_template_text_6702a6e3bc2dce95c3e3b61fe578f29c'] = 'Menge:'; $_MODULE['<{cheque}prestashop>mail_template_text_6702a6e3bc2dce95c3e3b61fe578f29c'] = 'Menge:';
$_MODULE['<{cheque}prestashop>mail_template_text_1c3bd8f6bd066270354607c08f930baf'] = 'Zahlbar im Auftrag von:'; $_MODULE['<{cheque}prestashop>mail_template_text_1c3bd8f6bd066270354607c08f930baf'] = 'Zahlbar im Auftrag von:';
$_MODULE['<{cheque}prestashop>mail_template_text_8f1fb2295c4289bae9fc26549b4b45f2'] = 'Bitte senden Sie Ihren Scheck an:'; $_MODULE['<{cheque}prestashop>mail_template_text_8f1fb2295c4289bae9fc26549b4b45f2'] = 'Bitte senden Sie Ihren Scheck an:';
// Added by docker/apply-translations.php
$_MODULE['<{cheque}prestashop>payment_execution_648020a0c34e9e10c63d362fe3e69f34'] = 'Bitte bestätigen Sie Ihre Buchung mit „Ich bestätige meine Buchung“.';
$_MODULE['<{cheque}prestashop>payment_execution_46b9e3665f187c739c55983f757ccda0'] = 'Ich bestätige meine Buchung';
$_MODULE['<{cheque}prestashop>infos_f4d0e8e3f5ba72e95d69115dd9c899cc'] = 'Wählt der Gast diese Zahlungsart, wechselt der Status der Buchung auf „Zahlung ausstehend“.';
$_MODULE['<{cheque}prestashop>payment_return_4ff70f7b2e5a74415de360150a6e59d3'] = 'Ihre';
$_MODULE['<{cheque}prestashop>payment_return_b020dd24318376f939f91f8fcb7266f6'] = 'Buchungen wurden';
$_MODULE['<{cheque}prestashop>payment_return_642b829e2ed9b9fece9b1d810bbc0f3b'] = 'Buchung wurde';
$_MODULE['<{cheque}prestashop>payment_return_659623af9479cd8813485e4e4a5a96c3'] = 'erfolgreich angelegt!';

View File

@@ -145,3 +145,9 @@ $_MODULE['<{qlohotelreview}prestashop>review_a0f942858344588234dda2fae9516ce9']
$_MODULE['<{qlohotelreview}prestashop>review_4f887556bd5dd9354f971969048e9364'] = '%1$d Personen fanden es hilfreich.'; $_MODULE['<{qlohotelreview}prestashop>review_4f887556bd5dd9354f971969048e9364'] = '%1$d Personen fanden es hilfreich.';
$_MODULE['<{qlohotelreview}prestashop>review_28b3b1e564a00f572c5d4e21da986d49'] = 'Missbrauch melden'; $_MODULE['<{qlohotelreview}prestashop>review_28b3b1e564a00f572c5d4e21da986d49'] = 'Missbrauch melden';
$_MODULE['<{qlohotelreview}prestashop>review_5337e185f4fe875860eb0258b7cf9b6f'] = 'hat geantwortet'; $_MODULE['<{qlohotelreview}prestashop>review_5337e185f4fe875860eb0258b7cf9b6f'] = 'hat geantwortet';
// Added by docker/apply-translations.php
$_MODULE['<{qlohotelreview}prestashop>add-review-popup_c61874c892c6285f24df8c9f890e4689'] = 'Erlaubte Formate: .jpg, .jpeg, .png';
$_MODULE['<{qlohotelreview}prestashop>add-review-popup_52678fb44b16d274aa055532744e6bdb'] = 'Fassen Sie Ihre Bewertung zusammen';
$_MODULE['<{qlohotelreview}prestashop>add-review-popup_ab881e45810d878ec93fefe487708820'] = 'Hier schreiben …';
$_MODULE['<{qlohotelreview}prestashop>review_0d2c413dc146dabfab6c7a796330ed50'] = ' Personen fanden das hilfreich.';