From 3389a9b66c3bbfd7337a03ceccf285e7785475bb Mon Sep 17 00:00:00 2001 From: sebseb7 Date: Sat, 22 Nov 2025 09:43:51 +0100 Subject: [PATCH] feat(Translation): enhance product dialogs and update translation model - Added new translation files for product dialogs to support additional languages. - Refactored various components to utilize translation functions for error messages, labels, and placeholders, enhancing localization support. --- src/components/ArticleAvailabilityForm.js | 37 +++++----- src/components/ArticleQuestionForm.js | 29 ++++---- src/components/ArticleRatingForm.js | 35 ++++----- src/components/PhotoUpload.js | 21 +++--- src/components/ProductDetailPage.js | 48 ++++++++---- src/i18n/locales/ar/index.js | 2 + src/i18n/locales/ar/product.js | 9 ++- src/i18n/locales/ar/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/bg/index.js | 2 + src/i18n/locales/bg/product.js | 9 ++- src/i18n/locales/bg/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/cs/index.js | 2 + src/i18n/locales/cs/product.js | 9 ++- src/i18n/locales/cs/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/de/index.js | 2 + src/i18n/locales/de/product.js | 1 + src/i18n/locales/de/productDialogs.js | 62 ++++++++++++++++ src/i18n/locales/el/index.js | 2 + src/i18n/locales/el/product.js | 5 +- src/i18n/locales/el/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/en/index.js | 2 + src/i18n/locales/en/product.js | 9 ++- src/i18n/locales/en/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/es/index.js | 2 + src/i18n/locales/es/product.js | 5 +- src/i18n/locales/es/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/fr/index.js | 2 + src/i18n/locales/fr/product.js | 5 +- src/i18n/locales/fr/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/hr/index.js | 2 + src/i18n/locales/hr/product.js | 9 ++- src/i18n/locales/hr/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/hu/index.js | 2 + src/i18n/locales/hu/product.js | 89 ++++++++++++----------- src/i18n/locales/hu/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/it/index.js | 2 + src/i18n/locales/it/product.js | 7 +- src/i18n/locales/it/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/pl/index.js | 2 + src/i18n/locales/pl/product.js | 13 ++-- src/i18n/locales/pl/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/ro/index.js | 2 + src/i18n/locales/ro/product.js | 7 +- src/i18n/locales/ro/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/ru/index.js | 2 + src/i18n/locales/ru/product.js | 7 +- src/i18n/locales/ru/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/sk/index.js | 2 + src/i18n/locales/sk/product.js | 13 ++-- src/i18n/locales/sk/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/sl/index.js | 2 + src/i18n/locales/sl/product.js | 9 ++- src/i18n/locales/sl/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/sq/index.js | 2 + src/i18n/locales/sq/product.js | 5 +- src/i18n/locales/sq/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/sr/index.js | 2 + src/i18n/locales/sr/product.js | 7 +- src/i18n/locales/sr/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/sv/index.js | 2 + src/i18n/locales/sv/product.js | 9 ++- src/i18n/locales/sv/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/tr/index.js | 2 + src/i18n/locales/tr/product.js | 7 +- src/i18n/locales/tr/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/uk/index.js | 2 + src/i18n/locales/uk/product.js | 11 +-- src/i18n/locales/uk/productDialogs.js | 61 ++++++++++++++++ src/i18n/locales/zh/index.js | 2 + src/i18n/locales/zh/product.js | 9 ++- src/i18n/locales/zh/productDialogs.js | 61 ++++++++++++++++ translate-i18n.js | 10 +-- 72 files changed, 1625 insertions(+), 196 deletions(-) create mode 100644 src/i18n/locales/ar/productDialogs.js create mode 100644 src/i18n/locales/bg/productDialogs.js create mode 100644 src/i18n/locales/cs/productDialogs.js create mode 100644 src/i18n/locales/de/productDialogs.js create mode 100644 src/i18n/locales/el/productDialogs.js create mode 100644 src/i18n/locales/en/productDialogs.js create mode 100644 src/i18n/locales/es/productDialogs.js create mode 100644 src/i18n/locales/fr/productDialogs.js create mode 100644 src/i18n/locales/hr/productDialogs.js create mode 100644 src/i18n/locales/hu/productDialogs.js create mode 100644 src/i18n/locales/it/productDialogs.js create mode 100644 src/i18n/locales/pl/productDialogs.js create mode 100644 src/i18n/locales/ro/productDialogs.js create mode 100644 src/i18n/locales/ru/productDialogs.js create mode 100644 src/i18n/locales/sk/productDialogs.js create mode 100644 src/i18n/locales/sl/productDialogs.js create mode 100644 src/i18n/locales/sq/productDialogs.js create mode 100644 src/i18n/locales/sr/productDialogs.js create mode 100644 src/i18n/locales/sv/productDialogs.js create mode 100644 src/i18n/locales/tr/productDialogs.js create mode 100644 src/i18n/locales/uk/productDialogs.js create mode 100644 src/i18n/locales/zh/productDialogs.js diff --git a/src/components/ArticleAvailabilityForm.js b/src/components/ArticleAvailabilityForm.js index 93e6d4a..0efa5bc 100644 --- a/src/components/ArticleAvailabilityForm.js +++ b/src/components/ArticleAvailabilityForm.js @@ -79,7 +79,7 @@ class ArticleAvailabilityForm extends Component { } else { this.setState({ loading: false, - error: response.error || 'Ein Fehler ist aufgetreten' + error: response.error || this.props.t("productDialogs.errorGeneric") }); } @@ -114,20 +114,21 @@ class ArticleAvailabilityForm extends Component { render() { const { name, email, telegramId, notificationMethod, message, loading, success, error } = this.state; + const { t } = this.props; return ( - Verfügbarkeit anfragen + {t("productDialogs.availabilityTitle")} - Dieser Artikel ist derzeit nicht verfügbar. Gerne informieren wir Sie, sobald er wieder lieferbar ist. + {t("productDialogs.availabilitySubtitle")} {success && ( - Vielen Dank für Ihre Anfrage! Wir werden Sie {notificationMethod === 'email' ? 'per E-Mail' : 'über Telegram'} informieren, sobald der Artikel wieder verfügbar ist. + {notificationMethod === 'email' ? t("productDialogs.availabilitySuccessEmail") : t("productDialogs.availabilitySuccessTelegram")} )} @@ -139,18 +140,18 @@ class ArticleAvailabilityForm extends Component { - Wie möchten Sie benachrichtigt werden? + {t("productDialogs.notificationMethodLabel")} } - label="E-Mail" + label={t("productDialogs.emailLabel")} /> } - label="Telegram Bot" + label={t("productDialogs.telegramBotLabel")} /> {notificationMethod === 'email' && ( )} {notificationMethod === 'telegram' && ( )} diff --git a/src/components/ArticleQuestionForm.js b/src/components/ArticleQuestionForm.js index aa34ef9..57b306a 100644 --- a/src/components/ArticleQuestionForm.js +++ b/src/components/ArticleQuestionForm.js @@ -98,7 +98,7 @@ class ArticleQuestionForm extends Component { } else { this.setState({ loading: false, - error: response.error || 'Ein Fehler ist aufgetreten' + error: response.error || this.props.t("productDialogs.errorGeneric") }); } @@ -110,7 +110,7 @@ class ArticleQuestionForm extends Component { } catch { this.setState({ loading: false, - error: 'Fehler beim Verarbeiten der Fotos' + error: this.props.t("productDialogs.errorPhotos") }); } @@ -140,20 +140,21 @@ class ArticleQuestionForm extends Component { render() { const { name, email, question, loading, success, error } = this.state; + const { t } = this.props; return ( - Frage zum Artikel + {t("productDialogs.questionTitle")} - Haben Sie eine Frage zu diesem Artikel? Wir helfen Ihnen gerne weiter. + {t("productDialogs.questionSubtitle")} {success && ( - Vielen Dank für Ihre Frage! Wir werden uns schnellstmöglich bei Ihnen melden. + {t("productDialogs.questionSuccess")} )} @@ -165,28 +166,28 @@ class ArticleQuestionForm extends Component { diff --git a/src/components/ArticleRatingForm.js b/src/components/ArticleRatingForm.js index ed8789c..f1c1788 100644 --- a/src/components/ArticleRatingForm.js +++ b/src/components/ArticleRatingForm.js @@ -106,7 +106,7 @@ class ArticleRatingForm extends Component { } else { this.setState({ loading: false, - error: response.error || 'Ein Fehler ist aufgetreten' + error: response.error || this.props.t("productDialogs.errorGeneric") }); } @@ -118,7 +118,7 @@ class ArticleRatingForm extends Component { } catch { this.setState({ loading: false, - error: 'Fehler beim Verarbeiten der Fotos' + error: this.props.t("productDialogs.errorPhotos") }); } @@ -149,20 +149,21 @@ class ArticleRatingForm extends Component { render() { const { name, email, rating, review, loading, success, error } = this.state; + const { t } = this.props; return ( - Artikel Bewerten + {t("productDialogs.ratingTitle")} - Teilen Sie Ihre Erfahrungen mit diesem Artikel und helfen Sie anderen Kunden bei der Entscheidung. + {t("productDialogs.ratingSubtitle")} {success && ( - Vielen Dank für Ihre Bewertung! Sie wird nach Prüfung veröffentlicht. + {t("productDialogs.ratingSuccess")} )} @@ -174,30 +175,30 @@ class ArticleRatingForm extends Component { - Bewertung * + {t("productDialogs.ratingLabel")} } /> - {rating > 0 ? `${rating} von 5 Sternen` : 'Bitte bewerten'} + {rating > 0 ? t("productDialogs.ratingStars", { rating }) : t("productDialogs.pleaseRate")} diff --git a/src/components/PhotoUpload.js b/src/components/PhotoUpload.js index 83b8e06..c447038 100644 --- a/src/components/PhotoUpload.js +++ b/src/components/PhotoUpload.js @@ -10,6 +10,7 @@ import { } from '@mui/material'; import Delete from '@mui/icons-material/Delete'; import CloudUpload from '@mui/icons-material/CloudUpload'; +import { withI18n } from '../i18n/withTranslation.js'; class PhotoUpload extends Component { constructor(props) { @@ -30,7 +31,7 @@ class PhotoUpload extends Component { // Validate file count if (this.state.files.length + selectedFiles.length > maxFiles) { this.setState({ - error: `Maximal ${maxFiles} Dateien erlaubt` + error: this.props.t("productDialogs.photoUploadErrorMaxFiles", { max: maxFiles }) }); return; } @@ -43,14 +44,14 @@ class PhotoUpload extends Component { for (const file of selectedFiles) { if (!validTypes.includes(file.type)) { this.setState({ - error: 'Nur Bilddateien (JPEG, PNG, GIF, WebP) sind erlaubt' + error: this.props.t("productDialogs.photoUploadErrorFileType") }); continue; } if (file.size > maxSize) { this.setState({ - error: `Datei zu groß. Maximum: ${Math.round(maxSize / (1024 * 1024))}MB` + error: this.props.t("productDialogs.photoUploadErrorFileSize", { maxSize: Math.round(maxSize / (1024 * 1024)) }) }); continue; } @@ -167,12 +168,12 @@ class PhotoUpload extends Component { render() { const { files, previews, error } = this.state; - const { disabled, label } = this.props; + const { disabled, label, t } = this.props; return ( - {label || 'Fotos anhängen (optional)'} + {label || t("productDialogs.photoUploadLabelDefault")} - Fotos auswählen + {t("productDialogs.photoUploadSelect")} {error && ( @@ -228,7 +229,7 @@ class PhotoUpload extends Component { size="small" onClick={() => this.handleRemoveFile(index)} disabled={disabled} - aria-label="Bild entfernen" + aria-label={t("productDialogs.photoUploadRemove")} sx={{ position: 'absolute', top: 4, @@ -269,10 +270,10 @@ class PhotoUpload extends Component { {files.length > 0 && ( - {files.length} Datei(en) ausgewählt + {t("productDialogs.photoUploadSelectedFiles", { count: files.length })} {previews.length > 0 && previews.some(p => p.originalSize && p.compressedSize) && ( - (komprimiert für Upload) + {t("productDialogs.photoUploadCompressed")} )} @@ -282,4 +283,4 @@ class PhotoUpload extends Component { } } -export default PhotoUpload; \ No newline at end of file +export default withI18n()(PhotoUpload); \ No newline at end of file diff --git a/src/components/ProductDetailPage.js b/src/components/ProductDetailPage.js index a6f6745..37a042d 100644 --- a/src/components/ProductDetailPage.js +++ b/src/components/ProductDetailPage.js @@ -762,7 +762,7 @@ class ProductDetailPage extends Component { handleEmbedShare = () => { const embedCode = ``; navigator.clipboard.writeText(embedCode).then(() => { - this.showSnackbar("Einbettungscode wurde in die Zwischenablage kopiert!"); + this.showSnackbar(this.props.t ? this.props.t("productDialogs.shareSuccessEmbed") : "Einbettungscode wurde in die Zwischenablage kopiert!"); }).catch(() => { // Fallback for older browsers try { @@ -772,9 +772,9 @@ class ProductDetailPage extends Component { textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); - this.showSnackbar("Einbettungscode wurde in die Zwischenablage kopiert!"); + this.showSnackbar(this.props.t ? this.props.t("productDialogs.shareSuccessEmbed") : "Einbettungscode wurde in die Zwischenablage kopiert!"); } catch { - this.showSnackbar("Fehler beim Kopieren des Einbettungscodes", "error"); + this.showSnackbar(this.props.t ? this.props.t("productDialogs.shareErrorEmbed") : "Fehler beim Kopieren des Einbettungscodes", "error"); } }); this.handleShareClose(); @@ -782,7 +782,10 @@ class ProductDetailPage extends Component { handleWhatsAppShare = () => { const url = this.getProductUrl(); - const text = `Schau dir dieses Produkt an: ${cleanProductName(this.state.product.name)}`; + const productName = cleanProductName(this.state.product.name); + const text = this.props.t + ? this.props.t("productDialogs.shareWhatsAppText", { name: productName }) + : `Schau dir dieses Produkt an: ${productName}`; const whatsappUrl = `https://wa.me/?text=${encodeURIComponent(text + ' ' + url)}`; window.open(whatsappUrl, '_blank'); this.handleShareClose(); @@ -797,7 +800,10 @@ class ProductDetailPage extends Component { handleTelegramShare = () => { const url = this.getProductUrl(); - const text = `Schau dir dieses Produkt an: ${cleanProductName(this.state.product.name)}`; + const productName = cleanProductName(this.state.product.name); + const text = this.props.t + ? this.props.t("productDialogs.shareTelegramText", { name: productName }) + : `Schau dir dieses Produkt an: ${productName}`; const telegramUrl = `https://t.me/share/url?url=${encodeURIComponent(url)}&text=${encodeURIComponent(text)}`; window.open(telegramUrl, '_blank'); this.handleShareClose(); @@ -805,8 +811,18 @@ class ProductDetailPage extends Component { handleEmailShare = () => { const url = this.getProductUrl(); - const subject = `Produktempfehlung: ${cleanProductName(this.state.product.name)}`; - const body = `Hallo,\n\nich möchte dir dieses Produkt empfehlen:\n\n${cleanProductName(this.state.product.name)}\n${url}\n\nViele Grüße`; + const productName = cleanProductName(this.state.product.name); + const subject = this.props.t + ? `${this.props.t("productDialogs.shareEmailSubject")}: ${productName}` + : `Produktempfehlung: ${productName}`; + + const body = this.props.t + ? this.props.t("productDialogs.shareEmailBody", { + name: productName, + url: url + }) + : `Hallo,\n\nich möchte dir dieses Produkt empfehlen:\n\n${productName}\n${url}\n\nViele Grüße`; + const emailUrl = `mailto:?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; window.location.href = emailUrl; this.handleShareClose(); @@ -815,7 +831,7 @@ class ProductDetailPage extends Component { handleLinkCopy = () => { const url = this.getProductUrl(); navigator.clipboard.writeText(url).then(() => { - this.showSnackbar("Link wurde in die Zwischenablage kopiert!"); + this.showSnackbar(this.props.t ? this.props.t("productDialogs.shareSuccessLink") : "Link wurde in die Zwischenablage kopiert!"); }).catch(() => { // Fallback for older browsers try { @@ -825,7 +841,7 @@ class ProductDetailPage extends Component { textArea.select(); document.execCommand('copy'); document.body.removeChild(textArea); - this.showSnackbar("Link wurde in die Zwischenablage kopiert!"); + this.showSnackbar(this.props.t ? this.props.t("productDialogs.shareSuccessLink") : "Link wurde in die Zwischenablage kopiert!"); } catch { this.showSnackbar("Fehler beim Kopieren des Links", "error"); } @@ -968,7 +984,7 @@ class ProductDetailPage extends Component { }).format(productData.price)} - inkl. MwSt. + {this.props.t ? this.props.t('product.inclVatSimple') : 'inkl. MwSt.'} @@ -1331,7 +1347,7 @@ class ProductDetailPage extends Component { whiteSpace: "nowrap" }} > - Frage zum Artikel + {this.props.t ? this.props.t('productDialogs.questionTitle') : "Frage zum Artikel"} {(product.available !== 1 && product.availableSupplier !== 1) && ( )} @@ -1595,7 +1611,7 @@ class ProductDetailPage extends Component { }} size="small" > - Teilen + {this.props.t ? this.props.t("productDialogs.shareTitle") : "Teilen"} - + @@ -1699,7 +1715,7 @@ class ProductDetailPage extends Component { - + diff --git a/src/i18n/locales/ar/index.js b/src/i18n/locales/ar/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/ar/index.js +++ b/src/i18n/locales/ar/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/ar/product.js b/src/i18n/locales/ar/product.js index f6bef22..f6ee0c1 100644 --- a/src/i18n/locales/ar/product.js +++ b/src/i18n/locales/ar/product.js @@ -5,9 +5,10 @@ export default { "notFoundDescription": "المنتج الذي تبحث عنه غير موجود أو تم إزالته.", "backToHome": "العودة إلى الصفحة الرئيسية", "error": "خطأ", - "articleNumber": "رقم الصنف", + "articleNumber": "رقم المنتج", "manufacturer": "الشركة المصنعة", "inclVat": "شامل {{vat}}% ضريبة القيمة المضافة", + "inclVatSimple": "شامل ضريبة القيمة المضافة", "priceUnit": "{{price}}/{{unit}}", "new": "جديد", "weeks": "أسابيع", @@ -15,7 +16,7 @@ export default { "inclVatFooter": "شامل {{vat}}% ضريبة القيمة المضافة,*", "availability": "التوفر", "inStock": "متوفر في المخزون", - "comingSoon": "قريبًا متوفر", + "comingSoon": "قريبًا", "deliveryTime": "مدة التوصيل", "inclShort": "شامل", "vatShort": "ضريبة القيمة المضافة", @@ -32,10 +33,10 @@ export default { "similarProducts": "منتجات مشابهة", "countDisplay": { "noProducts": "0 منتجات", - "oneProduct": "منتج واحد", + "oneProduct": "1 منتج", "multipleProducts": "{{count}} منتجات", "filteredProducts": "{{filtered}} من {{total}} منتجات", - "filteredOneProduct": "{{filtered}} من منتج واحد", + "filteredOneProduct": "{{filtered}} من 1 منتج", "xOfYProducts": "{{x}} من {{y}} منتجات" }, "removeFiltersToSee": "قم بإزالة الفلاتر لرؤية المنتجات", diff --git a/src/i18n/locales/ar/productDialogs.js b/src/i18n/locales/ar/productDialogs.js new file mode 100644 index 0000000..e23c837 --- /dev/null +++ b/src/i18n/locales/ar/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "سؤال عن المنتج", + "questionSubtitle": "هل لديك سؤال عن هذا المنتج؟ نحن سعداء بمساعدتك.", + "questionSuccess": "شكرًا على سؤالك! سنرد عليك في أقرب وقت ممكن.", + "nameLabel": "الاسم", + "namePlaceholder": "اسمك", + "emailLabel": "البريد الإلكتروني", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "سؤالك", + "questionPlaceholder": "صف سؤالك عن هذا المنتج...", + "photosLabelQuestion": "أرفق صورًا مع سؤالك (اختياري)", + "submitQuestion": "إرسال السؤال", + "sending": "جارٍ الإرسال...", + + "ratingTitle": "قيم المنتج", + "ratingSubtitle": "شارك تجربتك مع هذا المنتج وساعد العملاء الآخرين في اتخاذ قرارهم.", + "ratingSuccess": "شكرًا على تقييمك! سيتم نشره بعد المراجعة.", + "emailHelper": "لن يتم نشر بريدك الإلكتروني", + "ratingLabel": "التقييم *", + "pleaseRate": "يرجى التقييم", + "ratingStars": "{{rating}} من 5 نجوم", + "reviewLabel": "تقييمك (اختياري)", + "reviewPlaceholder": "صف تجاربك مع هذا المنتج...", + "photosLabelRating": "أرفق صورًا مع تقييمك (اختياري)", + "submitRating": "إرسال التقييم", + "errorGeneric": "حدث خطأ", + "errorPhotos": "خطأ في معالجة الصور", + + "availabilityTitle": "طلب التوفر", + "availabilitySubtitle": "هذا المنتج غير متوفر حاليًا. سنكون سعداء بإبلاغك بمجرد عودته للمخزون.", + "availabilitySuccessEmail": "شكرًا على طلبك! سنخطرك عبر البريد الإلكتروني بمجرد توفر المنتج مرة أخرى.", + "availabilitySuccessTelegram": "شكرًا على طلبك! سنخطرك عبر تيليجرام بمجرد توفر المنتج مرة أخرى.", + "notificationMethodLabel": "كيف تود أن يتم إعلامك؟", + "telegramBotLabel": "بوت تيليجرام", + "telegramIdLabel": "معرف تيليجرام", + "telegramPlaceholder": "@اسمكعلىتيليجرام أو معرف تيليجرام", + "telegramHelper": "أدخل اسم المستخدم الخاص بك على تيليجرام (مع @) أو معرف تيليجرام", + "messageLabel": "رسالة (اختياري)", + "messagePlaceholder": "معلومات إضافية أو أسئلة...", + "submitAvailability": "طلب التوفر", + + "photoUploadSelect": "اختر الصور", + "photoUploadErrorMaxFiles": "الحد الأقصى {{max}} ملفات مسموح بها", + "photoUploadErrorFileType": "مسموح فقط بملفات الصور (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "الملف كبير جدًا. الحد الأقصى: {{maxSize}} ميجابايت", + "photoUploadSelectedFiles": "{{count}} ملف(ملفات) مختارة", + "photoUploadCompressed": "(تم الضغط للرفع)", + "photoUploadRemove": "إزالة الصورة", + "photoUploadLabelDefault": "أرفق صورًا (اختياري)", + + "shareTitle": "مشاركة", + "shareEmbed": "تضمين", + "shareCopyLink": "نسخ الرابط", + "shareSuccessEmbed": "تم نسخ كود التضمين إلى الحافظة!", + "shareErrorEmbed": "حدث خطأ أثناء نسخ كود التضمين", + "shareSuccessLink": "تم نسخ الرابط إلى الحافظة!", + "shareWhatsAppText": "شوف المنتج ده: {{name}}", + "shareTelegramText": "شوف المنتج ده: {{name}}", + "shareEmailSubject": "توصية بمنتج", + "shareEmailBody": "مرحبًا،\n\nحابب أوصي لك بالمنتج ده:\n\n{{name}}\n{{url}}\n\nمع أطيب التحيات" +}; diff --git a/src/i18n/locales/bg/index.js b/src/i18n/locales/bg/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/bg/index.js +++ b/src/i18n/locales/bg/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/bg/product.js b/src/i18n/locales/bg/product.js index 75adc40..564b497 100644 --- a/src/i18n/locales/bg/product.js +++ b/src/i18n/locales/bg/product.js @@ -8,24 +8,25 @@ export default { "articleNumber": "Номер на артикул", "manufacturer": "Производител", "inclVat": "вкл. {{vat}}% ДДС", + "inclVatSimple": "вкл. ДДС", "priceUnit": "{{price}}/{{unit}}", "new": "Нов", - "weeks": "седмици", + "weeks": "Седмици", "arriving": "Пристигане:", "inclVatFooter": "вкл. {{vat}}% ДДС,*", "availability": "Наличност", - "inStock": "налично", + "inStock": "налично на склад", "comingSoon": "Очаква се скоро", "deliveryTime": "Срок на доставка", "inclShort": "вкл.", "vatShort": "ДДС", "weight": "Тегло: {{weight}} кг", "youSave": "Спестявате: {{amount}}", - "cheaperThanIndividual": "По-евтино от индивидуална покупка", + "cheaperThanIndividual": "По-евтино от закупуване поотделно", "pickupPrice": "Цена за вземане: 19,90 € на резник.", "consistsOf": "Състои се от:", "loadingComponentDetails": "{{index}}. Зареждане на детайли за компонента...", - "loadingProduct": "Продуктът се зарежда...", + "loadingProduct": "Зареждане на продукта...", "individualPriceTotal": "Обща индивидуална цена:", "setPrice": "Цена на комплекта:", "yourSavings": "Вашите спестявания:", diff --git a/src/i18n/locales/bg/productDialogs.js b/src/i18n/locales/bg/productDialogs.js new file mode 100644 index 0000000..8cece0b --- /dev/null +++ b/src/i18n/locales/bg/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Въпрос за продукта", + "questionSubtitle": "Имате ли въпрос за този продукт? Ще се радваме да ви помогнем.", + "questionSuccess": "Благодарим ви за въпроса! Ще се свържем с вас възможно най-скоро.", + "nameLabel": "Име", + "namePlaceholder": "Вашето име", + "emailLabel": "Имейл", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "Вашият въпрос", + "questionPlaceholder": "Опишете въпроса си за този продукт...", + "photosLabelQuestion": "Прикачете снимки към въпроса си (по избор)", + "submitQuestion": "Изпрати въпроса", + "sending": "Изпращане...", + + "ratingTitle": "Оценете продукта", + "ratingSubtitle": "Споделете опита си с този продукт и помогнете на други клиенти да вземат решение.", + "ratingSuccess": "Благодарим ви за вашия отзив! Той ще бъде публикуван след проверка.", + "emailHelper": "Вашият имейл няма да бъде публикуван", + "ratingLabel": "Оценка *", + "pleaseRate": "Моля, оценете", + "ratingStars": "{{rating}} от 5 звезди", + "reviewLabel": "Вашият отзив (по избор)", + "reviewPlaceholder": "Опишете опита си с този продукт...", + "photosLabelRating": "Прикачете снимки към отзива си (по избор)", + "submitRating": "Изпрати отзива", + "errorGeneric": "Възникна грешка", + "errorPhotos": "Грешка при обработка на снимките", + + "availabilityTitle": "Запитване за наличност", + "availabilitySubtitle": "Този продукт в момента не е наличен. Ще се радваме да ви уведомим веднага щом бъде наличен отново.", + "availabilitySuccessEmail": "Благодарим ви за запитването! Ще ви уведомим по имейл веднага щом продуктът отново е наличен.", + "availabilitySuccessTelegram": "Благодарим ви за запитването! Ще ви уведомим чрез Telegram веднага щом продуктът отново е наличен.", + "notificationMethodLabel": "Как бихте искали да бъдете уведомени?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@yourTelegramName or Telegram ID", + "telegramHelper": "Въведете вашето потребителско име в Telegram (с @) или Telegram ID", + "messageLabel": "Съобщение (по избор)", + "messagePlaceholder": "Допълнителна информация или въпроси...", + "submitAvailability": "Запитване за наличност", + + "photoUploadSelect": "Изберете снимки", + "photoUploadErrorMaxFiles": "Максимум {{max}} файла са разрешени", + "photoUploadErrorFileType": "Разрешени са само файлове с изображения (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Файлът е твърде голям. Максимум: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} файл(ове) избрани", + "photoUploadCompressed": "(компресиран за качване)", + "photoUploadRemove": "Премахни изображението", + "photoUploadLabelDefault": "Прикачи снимки (по избор)", + + "shareTitle": "Сподели", + "shareEmbed": "Вграждане", + "shareCopyLink": "Копирай линка", + "shareSuccessEmbed": "Кодът за вграждане е копиран в клипборда!", + "shareErrorEmbed": "Грешка при копиране на кода за вграждане", + "shareSuccessLink": "Линкът е копиран в клипборда!", + "shareWhatsAppText": "Виж този продукт: {{name}}", + "shareTelegramText": "Виж този продукт: {{name}}", + "shareEmailSubject": "Препоръка за продукт", + "shareEmailBody": "Здравейте,\n\nИскам да ви препоръчам този продукт:\n\n{{name}}\n{{url}}\n\nПоздрави" +}; diff --git a/src/i18n/locales/cs/index.js b/src/i18n/locales/cs/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/cs/index.js +++ b/src/i18n/locales/cs/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/cs/product.js b/src/i18n/locales/cs/product.js index 9e7de07..dc9a0bd 100644 --- a/src/i18n/locales/cs/product.js +++ b/src/i18n/locales/cs/product.js @@ -8,10 +8,11 @@ export default { "articleNumber": "Číslo artiklu", "manufacturer": "Výrobce", "inclVat": "včetně {{vat}}% DPH", + "inclVatSimple": "včetně DPH", "priceUnit": "{{price}}/{{unit}}", "new": "Nové", - "weeks": "týdny", - "arriving": "Příchod:", + "weeks": "Týdny", + "arriving": "Příjezd:", "inclVatFooter": "včetně {{vat}}% DPH,*", "availability": "Dostupnost", "inStock": "skladem", @@ -22,10 +23,10 @@ export default { "weight": "Hmotnost: {{weight}} kg", "youSave": "Ušetříte: {{amount}}", "cheaperThanIndividual": "Levnější než nákup jednotlivě", - "pickupPrice": "Cena za vyzvednutí: 19,90 € za řízek.", + "pickupPrice": "Cena za odběr: 19,90 € za řízek.", "consistsOf": "Skládá se z:", "loadingComponentDetails": "{{index}}. Načítání detailů komponenty...", - "loadingProduct": "Produkt se načítá...", + "loadingProduct": "Načítání produktu...", "individualPriceTotal": "Celková cena jednotlivě:", "setPrice": "Cena sady:", "yourSavings": "Vaše úspory:", diff --git a/src/i18n/locales/cs/productDialogs.js b/src/i18n/locales/cs/productDialogs.js new file mode 100644 index 0000000..6120a46 --- /dev/null +++ b/src/i18n/locales/cs/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Otázka ohledně produktu", + "questionSubtitle": "Máte otázku ohledně tohoto produktu? Rádi vám pomůžeme.", + "questionSuccess": "Děkujeme za vaši otázku! Ozveme se vám co nejdříve.", + "nameLabel": "Jméno", + "namePlaceholder": "Vaše jméno", + "emailLabel": "Email", + "emailPlaceholder": "vas.email@priklad.cz", + "questionLabel": "Vaše otázka", + "questionPlaceholder": "Popište svou otázku ohledně tohoto produktu...", + "photosLabelQuestion": "Přiložte fotografie k vaší otázce (volitelné)", + "submitQuestion": "Odeslat otázku", + "sending": "Odesílání...", + + "ratingTitle": "Ohodnoťte produkt", + "ratingSubtitle": "Podělte se o své zkušenosti s tímto produktem a pomozte ostatním zákazníkům s rozhodnutím.", + "ratingSuccess": "Děkujeme za vaši recenzi! Bude zveřejněna po ověření.", + "emailHelper": "Váš email nebude zveřejněn", + "ratingLabel": "Hodnocení *", + "pleaseRate": "Prosím ohodnoťte", + "ratingStars": "{{rating}} z 5 hvězdiček", + "reviewLabel": "Vaše recenze (volitelné)", + "reviewPlaceholder": "Popište své zkušenosti s tímto produktem...", + "photosLabelRating": "Přiložte fotografie k vaší recenzi (volitelné)", + "submitRating": "Odeslat recenzi", + "errorGeneric": "Došlo k chybě", + "errorPhotos": "Chyba při zpracování fotografií", + + "availabilityTitle": "Požádejte o dostupnost", + "availabilitySubtitle": "Tento produkt momentálně není dostupný. Rádi vás informujeme, jakmile bude opět skladem.", + "availabilitySuccessEmail": "Děkujeme za váš požadavek! Jakmile bude produkt opět dostupný, budeme vás informovat e-mailem.", + "availabilitySuccessTelegram": "Děkujeme za váš požadavek! Jakmile bude produkt opět dostupný, budeme vás informovat přes Telegram.", + "notificationMethodLabel": "Jak chcete být informováni?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@vaseTelegramJmeno nebo Telegram ID", + "telegramHelper": "Zadejte své uživatelské jméno na Telegramu (s @) nebo Telegram ID", + "messageLabel": "Zpráva (volitelné)", + "messagePlaceholder": "Další informace nebo otázky...", + "submitAvailability": "Požádat o dostupnost", + + "photoUploadSelect": "Vybrat fotografie", + "photoUploadErrorMaxFiles": "Maximálně {{max}} souborů povoleno", + "photoUploadErrorFileType": "Jsou povoleny pouze obrazové soubory (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Soubor je příliš velký. Maximum: {{maxSize}}MB", + "photoUploadSelectedFiles": "Vybráno {{count}} souborů", + "photoUploadCompressed": "(komprimováno pro nahrání)", + "photoUploadRemove": "Odstranit obrázek", + "photoUploadLabelDefault": "Přiložit fotografie (volitelné)", + + "shareTitle": "Sdílet", + "shareEmbed": "Vložit", + "shareCopyLink": "Kopírovat odkaz", + "shareSuccessEmbed": "Kód pro vložení zkopírován do schránky!", + "shareErrorEmbed": "Chyba při kopírování kódu pro vložení", + "shareSuccessLink": "Odkaz zkopírován do schránky!", + "shareWhatsAppText": "Podívejte se na tento produkt: {{name}}", + "shareTelegramText": "Podívejte se na tento produkt: {{name}}", + "shareEmailSubject": "Doporučení produktu", + "shareEmailBody": "Dobrý den,\n\nrád bych vám doporučil tento produkt:\n\n{{name}}\n{{url}}\n\nS pozdravem" +}; diff --git a/src/i18n/locales/de/index.js b/src/i18n/locales/de/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/de/index.js +++ b/src/i18n/locales/de/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/de/product.js b/src/i18n/locales/de/product.js index c40d047..18ed1a4 100644 --- a/src/i18n/locales/de/product.js +++ b/src/i18n/locales/de/product.js @@ -8,6 +8,7 @@ export default { "articleNumber": "Artikelnummer", "manufacturer": "Hersteller", "inclVat": "inkl. {{vat}}% MwSt.", + "inclVatSimple": "inkl. MwSt.", "priceUnit": "{{price}}/{{unit}}", "new": "Neu", "weeks": "Wochen", diff --git a/src/i18n/locales/de/productDialogs.js b/src/i18n/locales/de/productDialogs.js new file mode 100644 index 0000000..66b2293 --- /dev/null +++ b/src/i18n/locales/de/productDialogs.js @@ -0,0 +1,62 @@ +export default { + "questionTitle": "Frage zum Artikel", + "questionSubtitle": "Haben Sie eine Frage zu diesem Artikel? Wir helfen Ihnen gerne weiter.", + "questionSuccess": "Vielen Dank für Ihre Frage! Wir werden uns schnellstmöglich bei Ihnen melden.", + "nameLabel": "Name", + "namePlaceholder": "Ihr Name", + "emailLabel": "E-Mail", + "emailPlaceholder": "ihre.email@example.com", + "questionLabel": "Ihre Frage", + "questionPlaceholder": "Beschreiben Sie Ihre Frage zu diesem Artikel...", + "photosLabelQuestion": "Fotos zur Frage anhängen (optional)", + "submitQuestion": "Frage senden", + "sending": "Wird gesendet...", + + "ratingTitle": "Artikel Bewerten", + "ratingSubtitle": "Teilen Sie Ihre Erfahrungen mit diesem Artikel und helfen Sie anderen Kunden bei der Entscheidung.", + "ratingSuccess": "Vielen Dank für Ihre Bewertung! Sie wird nach Prüfung veröffentlicht.", + "emailHelper": "Ihre E-Mail wird nicht veröffentlicht", + "ratingLabel": "Bewertung *", + "pleaseRate": "Bitte bewerten", + "ratingStars": "{{rating}} von 5 Sternen", + "reviewLabel": "Ihre Bewertung (optional)", + "reviewPlaceholder": "Beschreiben Sie Ihre Erfahrungen mit diesem Artikel...", + "photosLabelRating": "Fotos zur Bewertung anhängen (optional)", + "submitRating": "Bewertung abgeben", + "errorGeneric": "Ein Fehler ist aufgetreten", + "errorPhotos": "Fehler beim Verarbeiten der Fotos", + + "availabilityTitle": "Verfügbarkeit anfragen", + "availabilitySubtitle": "Dieser Artikel ist derzeit nicht verfügbar. Gerne informieren wir Sie, sobald er wieder lieferbar ist.", + "availabilitySuccessEmail": "Vielen Dank für Ihre Anfrage! Wir werden Sie per E-Mail informieren, sobald der Artikel wieder verfügbar ist.", + "availabilitySuccessTelegram": "Vielen Dank für Ihre Anfrage! Wir werden Sie über Telegram informieren, sobald der Artikel wieder verfügbar ist.", + "notificationMethodLabel": "Wie möchten Sie benachrichtigt werden?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@IhrTelegramName oder Telegram ID", + "telegramHelper": "Geben Sie Ihren Telegram-Benutzernamen (mit @) oder Ihre Telegram-ID ein", + "messageLabel": "Nachricht (optional)", + "messagePlaceholder": "Zusätzliche Informationen oder Fragen...", + "submitAvailability": "Verfügbarkeit anfragen", + + "photoUploadSelect": "Fotos auswählen", + "photoUploadErrorMaxFiles": "Maximal {{max}} Dateien erlaubt", + "photoUploadErrorFileType": "Nur Bilddateien (JPEG, PNG, GIF, WebP) sind erlaubt", + "photoUploadErrorFileSize": "Datei zu groß. Maximum: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} Datei(en) ausgewählt", + "photoUploadCompressed": "(komprimiert für Upload)", + "photoUploadRemove": "Bild entfernen", + "photoUploadLabelDefault": "Fotos anhängen (optional)", + + "shareTitle": "Teilen", + "shareEmbed": "Einbetten", + "shareCopyLink": "Link kopieren", + "shareSuccessEmbed": "Einbettungscode wurde in die Zwischenablage kopiert!", + "shareErrorEmbed": "Fehler beim Kopieren des Einbettungscodes", + "shareSuccessLink": "Link wurde in die Zwischenablage kopiert!", + "shareWhatsAppText": "Schau dir dieses Produkt an: {{name}}", + "shareTelegramText": "Schau dir dieses Produkt an: {{name}}", + "shareEmailSubject": "Produktempfehlung", + "shareEmailBody": "Hallo,\n\nich möchte dir dieses Produkt empfehlen:\n\n{{name}}\n{{url}}\n\nViele Grüße" +}; + diff --git a/src/i18n/locales/el/index.js b/src/i18n/locales/el/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/el/index.js +++ b/src/i18n/locales/el/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/el/product.js b/src/i18n/locales/el/product.js index c20d29e..c934642 100644 --- a/src/i18n/locales/el/product.js +++ b/src/i18n/locales/el/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Αριθμός άρθρου", "manufacturer": "Κατασκευαστής", "inclVat": "συμπ. {{vat}}% ΦΠΑ", + "inclVatSimple": "συμπ. ΦΠΑ", "priceUnit": "{{price}}/{{unit}}", "new": "Νέο", - "weeks": "εβδομάδες", + "weeks": "Εβδομάδες", "arriving": "Άφιξη:", "inclVatFooter": "συμπ. {{vat}}% ΦΠΑ,*", "availability": "Διαθεσιμότητα", @@ -28,7 +29,7 @@ export default { "loadingProduct": "Φόρτωση προϊόντος...", "individualPriceTotal": "Συνολική τιμή μεμονωμένων:", "setPrice": "Τιμή σετ:", - "yourSavings": "Η εξοικονόμησή σας:", + "yourSavings": "Οι εξοικονομήσεις σας:", "similarProducts": "Παρόμοια προϊόντα", "countDisplay": { "noProducts": "0 προϊόντα", diff --git a/src/i18n/locales/el/productDialogs.js b/src/i18n/locales/el/productDialogs.js new file mode 100644 index 0000000..089779d --- /dev/null +++ b/src/i18n/locales/el/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Ερώτηση σχετικά με το προϊόν", + "questionSubtitle": "Έχετε κάποια ερώτηση για αυτό το προϊόν; Είμαστε εδώ για να σας βοηθήσουμε.", + "questionSuccess": "Ευχαριστούμε για την ερώτησή σας! Θα επικοινωνήσουμε μαζί σας το συντομότερο δυνατό.", + "nameLabel": "Όνομα", + "namePlaceholder": "Το όνομά σας", + "emailLabel": "Email", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "Η ερώτησή σας", + "questionPlaceholder": "Περιγράψτε την ερώτησή σας σχετικά με αυτό το προϊόν...", + "photosLabelQuestion": "Επισυνάψτε φωτογραφίες στην ερώτησή σας (προαιρετικό)", + "submitQuestion": "Αποστολή ερώτησης", + "sending": "Αποστολή...", + + "ratingTitle": "Αξιολογήστε το προϊόν", + "ratingSubtitle": "Μοιραστείτε την εμπειρία σας με αυτό το προϊόν και βοηθήστε άλλους πελάτες να πάρουν την απόφασή τους.", + "ratingSuccess": "Ευχαριστούμε για την αξιολόγησή σας! Θα δημοσιευτεί μετά από έλεγχο.", + "emailHelper": "Το email σας δεν θα δημοσιευτεί", + "ratingLabel": "Αξιολόγηση *", + "pleaseRate": "Παρακαλώ αξιολογήστε", + "ratingStars": "{{rating}} από 5 αστέρια", + "reviewLabel": "Η κριτική σας (προαιρετικό)", + "reviewPlaceholder": "Περιγράψτε τις εμπειρίες σας με αυτό το προϊόν...", + "photosLabelRating": "Επισυνάψτε φωτογραφίες στην κριτική σας (προαιρετικό)", + "submitRating": "Υποβολή κριτικής", + "errorGeneric": "Παρουσιάστηκε σφάλμα", + "errorPhotos": "Σφάλμα κατά την επεξεργασία των φωτογραφιών", + + "availabilityTitle": "Ζητήστε διαθεσιμότητα", + "availabilitySubtitle": "Αυτό το προϊόν δεν είναι διαθέσιμο αυτή τη στιγμή. Θα χαρούμε να σας ενημερώσουμε μόλις είναι ξανά διαθέσιμο.", + "availabilitySuccessEmail": "Ευχαριστούμε για το αίτημά σας! Θα σας ενημερώσουμε μέσω email μόλις το προϊόν είναι ξανά διαθέσιμο.", + "availabilitySuccessTelegram": "Ευχαριστούμε για το αίτημά σας! Θα σας ενημερώσουμε μέσω Telegram μόλις το προϊόν είναι ξανά διαθέσιμο.", + "notificationMethodLabel": "Πώς θέλετε να ειδοποιηθείτε;", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@yourTelegramName or Telegram ID", + "telegramHelper": "Εισάγετε το όνομα χρήστη Telegram (με @) ή το Telegram ID σας", + "messageLabel": "Μήνυμα (προαιρετικό)", + "messagePlaceholder": "Επιπλέον πληροφορίες ή ερωτήσεις...", + "submitAvailability": "Ζητήστε διαθεσιμότητα", + + "photoUploadSelect": "Επιλέξτε φωτογραφίες", + "photoUploadErrorMaxFiles": "Επιτρέπονται έως {{max}} αρχεία", + "photoUploadErrorFileType": "Επιτρέπονται μόνο αρχεία εικόνας (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Το αρχείο είναι πολύ μεγάλο. Μέγιστο: {{maxSize}}MB", + "photoUploadSelectedFiles": "Επιλέχθηκαν {{count}} αρχεία", + "photoUploadCompressed": "(συμπιεσμένο για αποστολή)", + "photoUploadRemove": "Αφαίρεση εικόνας", + "photoUploadLabelDefault": "Επισύναψη φωτογραφιών (προαιρετικό)", + + "shareTitle": "Κοινοποίηση", + "shareEmbed": "Ενσωμάτωση", + "shareCopyLink": "Αντιγραφή συνδέσμου", + "shareSuccessEmbed": "Ο κώδικας ενσωμάτωσης αντιγράφηκε στο πρόχειρο!", + "shareErrorEmbed": "Σφάλμα κατά την αντιγραφή του κώδικα ενσωμάτωσης", + "shareSuccessLink": "Ο σύνδεσμος αντιγράφηκε στο πρόχειρο!", + "shareWhatsAppText": "Δείτε αυτό το προϊόν: {{name}}", + "shareTelegramText": "Δείτε αυτό το προϊόν: {{name}}", + "shareEmailSubject": "Σύσταση προϊόντος", + "shareEmailBody": "Γεια σας,\n\nΘα ήθελα να σας προτείνω αυτό το προϊόν:\n\n{{name}}\n{{url}}\n\nΜε εκτίμηση" +}; diff --git a/src/i18n/locales/en/index.js b/src/i18n/locales/en/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/en/index.js +++ b/src/i18n/locales/en/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/en/product.js b/src/i18n/locales/en/product.js index 8ce7ad1..6fe8262 100644 --- a/src/i18n/locales/en/product.js +++ b/src/i18n/locales/en/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Article number", // Artikelnummer "manufacturer": "Manufacturer", // Hersteller "inclVat": "incl. {{vat}}% VAT", // inkl. {{vat}}% MwSt. + "inclVatSimple": "incl. VAT", // inkl. MwSt. "priceUnit": "{{price}}/{{unit}}", // {{price}}/{{unit}} "new": "New", // Neu - "weeks": "weeks", // Wochen + "weeks": "Weeks", // Wochen "arriving": "Arrival:", // Ankunft: "inclVatFooter": "incl. {{vat}}% VAT,*", // inkl. {{vat}}% MwSt.,* "availability": "Availability", // Verfügbarkeit @@ -23,13 +24,13 @@ export default { "youSave": "You save: {{amount}}", // Sie sparen: {{amount}} "cheaperThanIndividual": "Cheaper than buying individually", // Günstiger als Einzelkauf "pickupPrice": "Pickup price: €19.90 per cutting.", // Abholpreis: 19,90 € pro Steckling. - "consistsOf": "Consists of:", // Bestehend aus: + "consistsOf": "Consisting of:", // Bestehend aus: "loadingComponentDetails": "{{index}}. Loading component details...", // {{index}}. Lädt Komponent-Details... - "loadingProduct": "Product is loading...", // Produkt wird geladen... + "loadingProduct": "Loading product...", // Produkt wird geladen... "individualPriceTotal": "Total individual price:", // Einzelpreis gesamt: "setPrice": "Set price:", // Set-Preis: "yourSavings": "Your savings:", // Ihre Ersparnis: - "similarProducts": "Similar Products", // Ähnliche Produkte + "similarProducts": "Similar products", // Ähnliche Produkte "countDisplay": { "noProducts": "0 products", // 0 Produkte "oneProduct": "1 product", // 1 Produkt diff --git a/src/i18n/locales/en/productDialogs.js b/src/i18n/locales/en/productDialogs.js new file mode 100644 index 0000000..435283c --- /dev/null +++ b/src/i18n/locales/en/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Question about the product", // Frage zum Artikel + "questionSubtitle": "Do you have a question about this product? We are happy to help you.", // Haben Sie eine Frage zu diesem Artikel? Wir helfen Ihnen gerne weiter. + "questionSuccess": "Thank you for your question! We will get back to you as soon as possible.", // Vielen Dank für Ihre Frage! Wir werden uns schnellstmöglich bei Ihnen melden. + "nameLabel": "Name", // Name + "namePlaceholder": "Your name", // Ihr Name + "emailLabel": "Email", // E-Mail + "emailPlaceholder": "your.email@example.com", // ihre.email@example.com + "questionLabel": "Your question", // Ihre Frage + "questionPlaceholder": "Describe your question about this product...", // Beschreiben Sie Ihre Frage zu diesem Artikel... + "photosLabelQuestion": "Attach photos to your question (optional)", // Fotos zur Frage anhängen (optional) + "submitQuestion": "Send question", // Frage senden + "sending": "Sending...", // Wird gesendet... + + "ratingTitle": "Rate product", // Artikel Bewerten + "ratingSubtitle": "Share your experience with this product and help other customers make their decision.", // Teilen Sie Ihre Erfahrungen mit diesem Artikel und helfen Sie anderen Kunden bei der Entscheidung. + "ratingSuccess": "Thank you for your review! It will be published after verification.", // Vielen Dank für Ihre Bewertung! Sie wird nach Prüfung veröffentlicht. + "emailHelper": "Your email will not be published", // Ihre E-Mail wird nicht veröffentlicht + "ratingLabel": "Rating *", // Bewertung * + "pleaseRate": "Please rate", // Bitte bewerten + "ratingStars": "{{rating}} out of 5 stars", // {{rating}} von 5 Sternen + "reviewLabel": "Your review (optional)", // Ihre Bewertung (optional) + "reviewPlaceholder": "Describe your experiences with this product...", // Beschreiben Sie Ihre Erfahrungen mit diesem Artikel... + "photosLabelRating": "Attach photos to your review (optional)", // Fotos zur Bewertung anhängen (optional) + "submitRating": "Submit review", // Bewertung abgeben + "errorGeneric": "An error occurred", // Ein Fehler ist aufgetreten + "errorPhotos": "Error processing photos", // Fehler beim Verarbeiten der Fotos + + "availabilityTitle": "Request availability", // Verfügbarkeit anfragen + "availabilitySubtitle": "This product is currently unavailable. We will be happy to inform you as soon as it is back in stock.", // Dieser Artikel ist derzeit nicht verfügbar. Gerne informieren wir Sie, sobald er wieder lieferbar ist. + "availabilitySuccessEmail": "Thank you for your request! We will notify you by email as soon as the product is available again.", // Vielen Dank für Ihre Anfrage! Wir werden Sie per E-Mail informieren, sobald der Artikel wieder verfügbar ist. + "availabilitySuccessTelegram": "Thank you for your request! We will notify you via Telegram as soon as the product is available again.", // Vielen Dank für Ihre Anfrage! Wir werden Sie über Telegram informieren, sobald der Artikel wieder verfügbar ist. + "notificationMethodLabel": "How would you like to be notified?", // Wie möchten Sie benachrichtigt werden? + "telegramBotLabel": "Telegram Bot", // Telegram Bot + "telegramIdLabel": "Telegram ID", // Telegram ID + "telegramPlaceholder": "@yourTelegramName or Telegram ID", // @IhrTelegramName oder Telegram ID + "telegramHelper": "Enter your Telegram username (with @) or Telegram ID", // Geben Sie Ihren Telegram-Benutzernamen (mit @) oder Ihre Telegram-ID ein + "messageLabel": "Message (optional)", // Nachricht (optional) + "messagePlaceholder": "Additional information or questions...", // Zusätzliche Informationen oder Fragen... + "submitAvailability": "Request availability", // Verfügbarkeit anfragen + + "photoUploadSelect": "Select photos", // Fotos auswählen + "photoUploadErrorMaxFiles": "Maximum {{max}} files allowed", // Maximal {{max}} Dateien erlaubt + "photoUploadErrorFileType": "Only image files (JPEG, PNG, GIF, WebP) are allowed", // Nur Bilddateien (JPEG, PNG, GIF, WebP) sind erlaubt + "photoUploadErrorFileSize": "File too large. Maximum: {{maxSize}}MB", // Datei zu groß. Maximum: {{maxSize}}MB + "photoUploadSelectedFiles": "{{count}} file(s) selected", // {{count}} Datei(en) ausgewählt + "photoUploadCompressed": "(compressed for upload)", // (komprimiert für Upload) + "photoUploadRemove": "Remove image", // Bild entfernen + "photoUploadLabelDefault": "Attach photos (optional)", // Fotos anhängen (optional) + + "shareTitle": "Share", // Teilen + "shareEmbed": "Embed", // Einbetten + "shareCopyLink": "Copy link", // Link kopieren + "shareSuccessEmbed": "Embed code copied to clipboard!", // Einbettungscode wurde in die Zwischenablage kopiert! + "shareErrorEmbed": "Error copying the embed code", // Fehler beim Kopieren des Einbettungscodes + "shareSuccessLink": "Link copied to clipboard!", // Link wurde in die Zwischenablage kopiert! + "shareWhatsAppText": "Check out this product: {{name}}", // Schau dir dieses Produkt an: {{name}} + "shareTelegramText": "Check out this product: {{name}}", // Schau dir dieses Produkt an: {{name}} + "shareEmailSubject": "Product recommendation", // Produktempfehlung + "shareEmailBody": "Hello,\n\nI'd like to recommend this product to you:\n\n{{name}}\n{{url}}\n\nBest regards", // Hallo,\n\nich möchte dir dieses Produkt empfehlen:\n\n{{name}}\n{{url}}\n\nViele Grüße +}; diff --git a/src/i18n/locales/es/index.js b/src/i18n/locales/es/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/es/index.js +++ b/src/i18n/locales/es/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/es/product.js b/src/i18n/locales/es/product.js index 80d7260..6988707 100644 --- a/src/i18n/locales/es/product.js +++ b/src/i18n/locales/es/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Número de artículo", "manufacturer": "Fabricante", "inclVat": "incl. {{vat}}% IVA", + "inclVatSimple": "incl. IVA", "priceUnit": "{{price}}/{{unit}}", "new": "Nuevo", - "weeks": "semanas", + "weeks": "Semanas", "arriving": "Llegada:", "inclVatFooter": "incl. {{vat}}% IVA,*", "availability": "Disponibilidad", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Precio de recogida: 19,90 € por esqueje.", "consistsOf": "Consiste en:", "loadingComponentDetails": "{{index}}. Cargando detalles del componente...", - "loadingProduct": "Producto cargando...", + "loadingProduct": "Cargando producto...", "individualPriceTotal": "Precio individual total:", "setPrice": "Precio del set:", "yourSavings": "Tus ahorros:", diff --git a/src/i18n/locales/es/productDialogs.js b/src/i18n/locales/es/productDialogs.js new file mode 100644 index 0000000..268824a --- /dev/null +++ b/src/i18n/locales/es/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Pregunta sobre el producto", + "questionSubtitle": "¿Tiene alguna pregunta sobre este producto? Estamos encantados de ayudarle.", + "questionSuccess": "¡Gracias por su pregunta! Nos pondremos en contacto con usted lo antes posible.", + "nameLabel": "Nombre", + "namePlaceholder": "Su nombre", + "emailLabel": "Correo electrónico", + "emailPlaceholder": "su.email@ejemplo.com", + "questionLabel": "Su pregunta", + "questionPlaceholder": "Describa su pregunta sobre este producto...", + "photosLabelQuestion": "Adjunte fotos a su pregunta (opcional)", + "submitQuestion": "Enviar pregunta", + "sending": "Enviando...", + + "ratingTitle": "Calificar producto", + "ratingSubtitle": "Comparta su experiencia con este producto y ayude a otros clientes a tomar su decisión.", + "ratingSuccess": "¡Gracias por su reseña! Se publicará después de la verificación.", + "emailHelper": "Su correo electrónico no será publicado", + "ratingLabel": "Calificación *", + "pleaseRate": "Por favor califique", + "ratingStars": "{{rating}} de 5 estrellas", + "reviewLabel": "Su reseña (opcional)", + "reviewPlaceholder": "Describa sus experiencias con este producto...", + "photosLabelRating": "Adjunte fotos a su reseña (opcional)", + "submitRating": "Enviar reseña", + "errorGeneric": "Ocurrió un error", + "errorPhotos": "Error al procesar las fotos", + + "availabilityTitle": "Solicitar disponibilidad", + "availabilitySubtitle": "Este producto no está disponible actualmente. Le informaremos tan pronto como vuelva a estar en stock.", + "availabilitySuccessEmail": "¡Gracias por su solicitud! Le notificaremos por correo electrónico tan pronto como el producto esté disponible nuevamente.", + "availabilitySuccessTelegram": "¡Gracias por su solicitud! Le notificaremos vía Telegram tan pronto como el producto esté disponible nuevamente.", + "notificationMethodLabel": "¿Cómo desea ser notificado?", + "telegramBotLabel": "Bot de Telegram", + "telegramIdLabel": "ID de Telegram", + "telegramPlaceholder": "@suNombreTelegram o ID de Telegram", + "telegramHelper": "Ingrese su nombre de usuario de Telegram (con @) o ID de Telegram", + "messageLabel": "Mensaje (opcional)", + "messagePlaceholder": "Información adicional o preguntas...", + "submitAvailability": "Solicitar disponibilidad", + + "photoUploadSelect": "Seleccionar fotos", + "photoUploadErrorMaxFiles": "Máximo {{max}} archivos permitidos", + "photoUploadErrorFileType": "Solo se permiten archivos de imagen (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Archivo demasiado grande. Máximo: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} archivo(s) seleccionado(s)", + "photoUploadCompressed": "(comprimido para subir)", + "photoUploadRemove": "Eliminar imagen", + "photoUploadLabelDefault": "Adjuntar fotos (opcional)", + + "shareTitle": "Compartir", + "shareEmbed": "Insertar", + "shareCopyLink": "Copiar enlace", + "shareSuccessEmbed": "¡Código de inserción copiado al portapapeles!", + "shareErrorEmbed": "Error al copiar el código de inserción", + "shareSuccessLink": "¡Enlace copiado al portapapeles!", + "shareWhatsAppText": "Mira este producto: {{name}}", + "shareTelegramText": "Mira este producto: {{name}}", + "shareEmailSubject": "Recomendación de producto", + "shareEmailBody": "Hola,\n\nQuisiera recomendarte este producto:\n\n{{name}}\n{{url}}\n\nSaludos cordiales" +}; diff --git a/src/i18n/locales/fr/index.js b/src/i18n/locales/fr/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/fr/index.js +++ b/src/i18n/locales/fr/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/fr/product.js b/src/i18n/locales/fr/product.js index 6a8c704..21165dd 100644 --- a/src/i18n/locales/fr/product.js +++ b/src/i18n/locales/fr/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Numéro d'article", "manufacturer": "Fabricant", "inclVat": "TTC {{vat}}%", + "inclVatSimple": "TTC", "priceUnit": "{{price}}/{{unit}}", "new": "Nouveau", - "weeks": "semaines", + "weeks": "Semaines", "arriving": "Arrivée :", "inclVatFooter": "TTC {{vat}}%,*", "availability": "Disponibilité", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Prix de retrait : 19,90 € par bouture.", "consistsOf": "Composé de :", "loadingComponentDetails": "{{index}}. Chargement des détails du composant...", - "loadingProduct": "Le produit est en cours de chargement...", + "loadingProduct": "Chargement du produit...", "individualPriceTotal": "Prix individuel total :", "setPrice": "Prix du lot :", "yourSavings": "Vos économies :", diff --git a/src/i18n/locales/fr/productDialogs.js b/src/i18n/locales/fr/productDialogs.js new file mode 100644 index 0000000..0f4026f --- /dev/null +++ b/src/i18n/locales/fr/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Question sur le produit", + "questionSubtitle": "Vous avez une question sur ce produit ? Nous sommes heureux de vous aider.", + "questionSuccess": "Merci pour votre question ! Nous vous répondrons dès que possible.", + "nameLabel": "Nom", + "namePlaceholder": "Votre nom", + "emailLabel": "Email", + "emailPlaceholder": "votre.email@exemple.com", + "questionLabel": "Votre question", + "questionPlaceholder": "Décrivez votre question à propos de ce produit...", + "photosLabelQuestion": "Joindre des photos à votre question (optionnel)", + "submitQuestion": "Envoyer la question", + "sending": "Envoi en cours...", + + "ratingTitle": "Noter le produit", + "ratingSubtitle": "Partagez votre expérience avec ce produit et aidez les autres clients à prendre leur décision.", + "ratingSuccess": "Merci pour votre avis ! Il sera publié après vérification.", + "emailHelper": "Votre email ne sera pas publié", + "ratingLabel": "Note *", + "pleaseRate": "Veuillez noter", + "ratingStars": "{{rating}} sur 5 étoiles", + "reviewLabel": "Votre avis (optionnel)", + "reviewPlaceholder": "Décrivez vos expériences avec ce produit...", + "photosLabelRating": "Joindre des photos à votre avis (optionnel)", + "submitRating": "Soumettre l'avis", + "errorGeneric": "Une erreur est survenue", + "errorPhotos": "Erreur lors du traitement des photos", + + "availabilityTitle": "Demander la disponibilité", + "availabilitySubtitle": "Ce produit est actuellement indisponible. Nous serons heureux de vous informer dès qu'il sera de nouveau en stock.", + "availabilitySuccessEmail": "Merci pour votre demande ! Nous vous informerons par email dès que le produit sera à nouveau disponible.", + "availabilitySuccessTelegram": "Merci pour votre demande ! Nous vous informerons via Telegram dès que le produit sera à nouveau disponible.", + "notificationMethodLabel": "Comment souhaitez-vous être informé ?", + "telegramBotLabel": "Bot Telegram", + "telegramIdLabel": "ID Telegram", + "telegramPlaceholder": "@votreNomTelegram ou ID Telegram", + "telegramHelper": "Entrez votre nom d'utilisateur Telegram (avec @) ou votre ID Telegram", + "messageLabel": "Message (optionnel)", + "messagePlaceholder": "Informations supplémentaires ou questions...", + "submitAvailability": "Demander la disponibilité", + + "photoUploadSelect": "Sélectionner des photos", + "photoUploadErrorMaxFiles": "Maximum {{max}} fichiers autorisés", + "photoUploadErrorFileType": "Seuls les fichiers image (JPEG, PNG, GIF, WebP) sont autorisés", + "photoUploadErrorFileSize": "Fichier trop volumineux. Maximum : {{maxSize}}Mo", + "photoUploadSelectedFiles": "{{count}} fichier(s) sélectionné(s)", + "photoUploadCompressed": "(compressé pour l'envoi)", + "photoUploadRemove": "Supprimer l'image", + "photoUploadLabelDefault": "Joindre des photos (optionnel)", + + "shareTitle": "Partager", + "shareEmbed": "Intégrer", + "shareCopyLink": "Copier le lien", + "shareSuccessEmbed": "Code d'intégration copié dans le presse-papiers !", + "shareErrorEmbed": "Erreur lors de la copie du code d'intégration", + "shareSuccessLink": "Lien copié dans le presse-papiers !", + "shareWhatsAppText": "Découvrez ce produit : {{name}}", + "shareTelegramText": "Découvrez ce produit : {{name}}", + "shareEmailSubject": "Recommandation de produit", + "shareEmailBody": "Bonjour,\n\nJe souhaite vous recommander ce produit :\n\n{{name}}\n{{url}}\n\nCordialement" +}; diff --git a/src/i18n/locales/hr/index.js b/src/i18n/locales/hr/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/hr/index.js +++ b/src/i18n/locales/hr/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/hr/product.js b/src/i18n/locales/hr/product.js index 243dbac..2de2eb8 100644 --- a/src/i18n/locales/hr/product.js +++ b/src/i18n/locales/hr/product.js @@ -3,14 +3,15 @@ export default { "loadingDescription": "Učitavanje opisa proizvoda...", "notFound": "Proizvod nije pronađen", "notFoundDescription": "Proizvod koji tražite ne postoji ili je uklonjen.", - "backToHome": "Povratak na početnu stranicu", + "backToHome": "Natrag na početnu stranicu", "error": "Greška", "articleNumber": "Broj artikla", "manufacturer": "Proizvođač", "inclVat": "uključujući {{vat}}% PDV-a", + "inclVatSimple": "uključujući PDV", "priceUnit": "{{price}}/{{unit}}", "new": "Novo", - "weeks": "tjedana", + "weeks": "Tjedni", "arriving": "Dolazak:", "inclVatFooter": "uključujući {{vat}}% PDV-a,*", "availability": "Dostupnost", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Cijena preuzimanja: 19,90 € po reznici.", "consistsOf": "Sastoji se od:", "loadingComponentDetails": "{{index}}. Učitavanje detalja komponente...", - "loadingProduct": "Proizvod se učitava...", + "loadingProduct": "Učitavanje proizvoda...", "individualPriceTotal": "Ukupna pojedinačna cijena:", "setPrice": "Cijena seta:", "yourSavings": "Vaša ušteda:", @@ -38,7 +39,7 @@ export default { "filteredOneProduct": "{{filtered}} od 1 proizvoda", "xOfYProducts": "{{x}} od {{y}} proizvoda" }, - "removeFiltersToSee": "Uklonite filtere da vidite proizvode", + "removeFiltersToSee": "Uklonite filtre da vidite proizvode", "outOfStock": "Nema na skladištu", "fromXProducts": "od {{count}} proizvoda", "discount": { diff --git a/src/i18n/locales/hr/productDialogs.js b/src/i18n/locales/hr/productDialogs.js new file mode 100644 index 0000000..501c416 --- /dev/null +++ b/src/i18n/locales/hr/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Pitanje o proizvodu", + "questionSubtitle": "Imate li pitanje o ovom proizvodu? Rado ćemo vam pomoći.", + "questionSuccess": "Hvala na vašem pitanju! Javili smo vam se što je prije moguće.", + "nameLabel": "Ime", + "namePlaceholder": "Vaše ime", + "emailLabel": "Email", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "Vaše pitanje", + "questionPlaceholder": "Opišite svoje pitanje o ovom proizvodu...", + "photosLabelQuestion": "Priložite fotografije uz svoje pitanje (opcionalno)", + "submitQuestion": "Pošalji pitanje", + "sending": "Šalje se...", + + "ratingTitle": "Ocijenite proizvod", + "ratingSubtitle": "Podijelite svoje iskustvo s ovim proizvodom i pomozite drugim kupcima u odluci.", + "ratingSuccess": "Hvala na vašoj recenziji! Bit će objavljena nakon provjere.", + "emailHelper": "Vaš email neće biti objavljen", + "ratingLabel": "Ocjena *", + "pleaseRate": "Molimo ocijenite", + "ratingStars": "{{rating}} od 5 zvjezdica", + "reviewLabel": "Vaša recenzija (opcionalno)", + "reviewPlaceholder": "Opišite svoja iskustva s ovim proizvodom...", + "photosLabelRating": "Priložite fotografije uz svoju recenziju (opcionalno)", + "submitRating": "Pošalji recenziju", + "errorGeneric": "Došlo je do pogreške", + "errorPhotos": "Pogreška pri obradi fotografija", + + "availabilityTitle": "Zatražite dostupnost", + "availabilitySubtitle": "Ovaj proizvod trenutno nije dostupan. Obavijestit ćemo vas čim ponovno bude na skladištu.", + "availabilitySuccessEmail": "Hvala na vašem zahtjevu! Obavijestit ćemo vas putem emaila čim proizvod ponovno bude dostupan.", + "availabilitySuccessTelegram": "Hvala na vašem zahtjevu! Obavijestit ćemo vas putem Telegrama čim proizvod ponovno bude dostupan.", + "notificationMethodLabel": "Kako želite biti obaviješteni?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@yourTelegramName or Telegram ID", + "telegramHelper": "Unesite svoje Telegram korisničko ime (s @) ili Telegram ID", + "messageLabel": "Poruka (opcionalno)", + "messagePlaceholder": "Dodatne informacije ili pitanja...", + "submitAvailability": "Zatražite dostupnost", + + "photoUploadSelect": "Odaberite fotografije", + "photoUploadErrorMaxFiles": "Dozvoljeno maksimalno {{max}} datoteka", + "photoUploadErrorFileType": "Dozvoljene su samo slikovne datoteke (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Datoteka je prevelika. Maksimum: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} datoteka je odabrano", + "photoUploadCompressed": "(komprimirano za prijenos)", + "photoUploadRemove": "Ukloni sliku", + "photoUploadLabelDefault": "Priložite fotografije (opcionalno)", + + "shareTitle": "Podijeli", + "shareEmbed": "Ugradi", + "shareCopyLink": "Kopiraj link", + "shareSuccessEmbed": "Kod za ugradnju kopiran u međuspremnik!", + "shareErrorEmbed": "Pogreška pri kopiranju koda za ugradnju", + "shareSuccessLink": "Link kopiran u međuspremnik!", + "shareWhatsAppText": "Pogledajte ovaj proizvod: {{name}}", + "shareTelegramText": "Pogledajte ovaj proizvod: {{name}}", + "shareEmailSubject": "Preporuka proizvoda", + "shareEmailBody": "Pozdrav,\n\nŽelio/la bih vam preporučiti ovaj proizvod:\n\n{{name}}\n{{url}}\n\nSrdačan pozdrav" +}; diff --git a/src/i18n/locales/hu/index.js b/src/i18n/locales/hu/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/hu/index.js +++ b/src/i18n/locales/hu/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/hu/product.js b/src/i18n/locales/hu/product.js index d7182a8..0a7e948 100644 --- a/src/i18n/locales/hu/product.js +++ b/src/i18n/locales/hu/product.js @@ -1,50 +1,51 @@ export default { - "loading": "Termék betöltése...", - "loadingDescription": "Termékleírás betöltése...", - "notFound": "A termék nem található", - "notFoundDescription": "A keresett termék nem létezik vagy eltávolításra került.", - "backToHome": "Vissza a kezdőlapra", - "error": "Hiba", - "articleNumber": "Cikkszám", - "manufacturer": "Gyártó", - "inclVat": "áfával együtt {{vat}}%", - "priceUnit": "{{price}}/{{unit}}", - "new": "Új", - "weeks": "hetek", - "arriving": "Érkezés:", - "inclVatFooter": "áfával együtt {{vat}}%,*", - "availability": "Elérhetőség", - "inStock": "készleten", - "comingSoon": "Hamarosan elérhető", - "deliveryTime": "Szállítási idő", - "inclShort": "áfával", - "vatShort": "ÁFA", - "weight": "Súly: {{weight}} kg", - "youSave": "Megtakarítás: {{amount}}", - "cheaperThanIndividual": "Olcsóbb, mint külön megvásárolni", - "pickupPrice": "Átvételi ár: 19,90 € darabonként.", - "consistsOf": "Tartalmazza:", - "loadingComponentDetails": "{{index}}. Komponens részleteinek betöltése...", - "loadingProduct": "Termék betöltése...", - "individualPriceTotal": "Egyedi ár összesen:", - "setPrice": "Szett ár:", - "yourSavings": "Megtakarításod:", - "similarProducts": "Hasonló termékek", + "loading": "Termék betöltése...", + "loadingDescription": "Termékleírás betöltése...", + "notFound": "A termék nem található", + "notFoundDescription": "A keresett termék nem létezik vagy eltávolításra került.", + "backToHome": "Vissza a kezdőlapra", + "error": "Hiba", + "articleNumber": "Cikkszám", + "manufacturer": "Gyártó", + "inclVat": "áfával együtt {{vat}}%", + "inclVatSimple": "áfával együtt", + "priceUnit": "{{price}}/{{unit}}", + "new": "Új", + "weeks": "Hét", + "arriving": "Érkezés:", + "inclVatFooter": "áfával együtt {{vat}}%,*", + "availability": "Elérhetőség", + "inStock": "készleten", + "comingSoon": "Hamarosan elérhető", + "deliveryTime": "Szállítási idő", + "inclShort": "áfával", + "vatShort": "ÁFA", + "weight": "Súly: {{weight}} kg", + "youSave": "Megtakarítás: {{amount}}", + "cheaperThanIndividual": "Olcsóbb, mint külön megvásárolni", + "pickupPrice": "Átvételi ár: 19,90 € darabonként.", + "consistsOf": "Tartalmazza:", + "loadingComponentDetails": "{{index}}. Komponens részleteinek betöltése...", + "loadingProduct": "Termék betöltése...", + "individualPriceTotal": "Egyedi ár összesen:", + "setPrice": "Szett ár:", + "yourSavings": "Az Ön megtakarítása:", + "similarProducts": "Hasonló termékek", "countDisplay": { - "noProducts": "0 termék", - "oneProduct": "1 termék", - "multipleProducts": "{{count}} termék", - "filteredProducts": "{{filtered}} a(z) {{total}} termékből", - "filteredOneProduct": "{{filtered}} az 1 termékből", - "xOfYProducts": "{{x}} a(z) {{y}} termékből" + "noProducts": "0 termék", + "oneProduct": "1 termék", + "multipleProducts": "{{count}} termék", + "filteredProducts": "{{filtered}} a(z) {{total}} termékből", + "filteredOneProduct": "{{filtered}} az 1 termékből", + "xOfYProducts": "{{x}} a(z) {{y}} termékből" }, - "removeFiltersToSee": "Szűrők eltávolítása a termékek megtekintéséhez", - "outOfStock": "Nincs készleten", - "fromXProducts": "{{count}} terméktől", + "removeFiltersToSee": "Szűrők eltávolítása a termékek megtekintéséhez", + "outOfStock": "Nincs készleten", + "fromXProducts": "{{count}} terméktől", "discount": { - "from3Products": "3 terméktől", - "from5Products": "5 terméktől", - "from7Products": "7 terméktől", - "moreProductsMoreSavings": "Minél több terméket választasz, annál többet spórolsz!" + "from3Products": "3 terméktől", + "from5Products": "5 terméktől", + "from7Products": "7 terméktől", + "moreProductsMoreSavings": "Minél több terméket választasz, annál többet spórolsz!" } }; diff --git a/src/i18n/locales/hu/productDialogs.js b/src/i18n/locales/hu/productDialogs.js new file mode 100644 index 0000000..8685f79 --- /dev/null +++ b/src/i18n/locales/hu/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Kérdés a termékről", + "questionSubtitle": "Van kérdése ezzel a termékkel kapcsolatban? Örömmel segítünk.", + "questionSuccess": "Köszönjük a kérdését! A lehető leghamarabb válaszolunk.", + "nameLabel": "Név", + "namePlaceholder": "Az Ön neve", + "emailLabel": "Email", + "emailPlaceholder": "az.email@pelda.hu", + "questionLabel": "Az Ön kérdése", + "questionPlaceholder": "Írja le kérdését ezzel a termékkel kapcsolatban...", + "photosLabelQuestion": "Csatoljon fényképeket a kérdéséhez (opcionális)", + "submitQuestion": "Kérdés küldése", + "sending": "Küldés...", + + "ratingTitle": "Értékelje a terméket", + "ratingSubtitle": "Ossza meg tapasztalatait ezzel a termékkel kapcsolatban, és segítsen más vásárlóknak a döntésben.", + "ratingSuccess": "Köszönjük az értékelését! Ellenőrzés után megjelenik.", + "emailHelper": "Az Ön e-mail címe nem lesz nyilvános", + "ratingLabel": "Értékelés *", + "pleaseRate": "Kérjük, értékeljen", + "ratingStars": "{{rating}} az 5 csillagból", + "reviewLabel": "Az Ön értékelése (opcionális)", + "reviewPlaceholder": "Írja le tapasztalatait ezzel a termékkel kapcsolatban...", + "photosLabelRating": "Csatoljon fényképeket az értékeléséhez (opcionális)", + "submitRating": "Értékelés elküldése", + "errorGeneric": "Hiba történt", + "errorPhotos": "Hiba a fényképek feldolgozása során", + + "availabilityTitle": "Készletkérés", + "availabilitySubtitle": "Ez a termék jelenleg nem elérhető. Örömmel értesítjük, amint újra készleten lesz.", + "availabilitySuccessEmail": "Köszönjük a kérését! E-mailben értesítjük, amint a termék újra elérhető.", + "availabilitySuccessTelegram": "Köszönjük a kérését! Telegramon értesítjük, amint a termék újra elérhető.", + "notificationMethodLabel": "Hogyan szeretne értesítést kapni?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@TelegramNeved vagy Telegram ID", + "telegramHelper": "Adja meg Telegram felhasználónevét (@-al) vagy Telegram ID-ját", + "messageLabel": "Üzenet (opcionális)", + "messagePlaceholder": "További információk vagy kérdések...", + "submitAvailability": "Készletkérés", + + "photoUploadSelect": "Fényképek kiválasztása", + "photoUploadErrorMaxFiles": "Maximum {{max}} fájl engedélyezett", + "photoUploadErrorFileType": "Csak képfájlok (JPEG, PNG, GIF, WebP) engedélyezettek", + "photoUploadErrorFileSize": "A fájl túl nagy. Maximum: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} fájl kiválasztva", + "photoUploadCompressed": "(feltöltéshez tömörítve)", + "photoUploadRemove": "Kép eltávolítása", + "photoUploadLabelDefault": "Fényképek csatolása (opcionális)", + + "shareTitle": "Megosztás", + "shareEmbed": "Beágyazás", + "shareCopyLink": "Link másolása", + "shareSuccessEmbed": "Beágyazási kód a vágólapra másolva!", + "shareErrorEmbed": "Hiba a beágyazási kód másolásakor", + "shareSuccessLink": "Link a vágólapra másolva!", + "shareWhatsAppText": "Nézd meg ezt a terméket: {{name}}", + "shareTelegramText": "Nézd meg ezt a terméket: {{name}}", + "shareEmailSubject": "Termékajánló", + "shareEmailBody": "Szia,\n\nSzeretném ajánlani neked ezt a terméket:\n\n{{name}}\n{{url}}\n\nÜdvözlettel" +}; diff --git a/src/i18n/locales/it/index.js b/src/i18n/locales/it/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/it/index.js +++ b/src/i18n/locales/it/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/it/product.js b/src/i18n/locales/it/product.js index 252d565..b719705 100644 --- a/src/i18n/locales/it/product.js +++ b/src/i18n/locales/it/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Numero articolo", "manufacturer": "Produttore", "inclVat": "incl. {{vat}}% IVA", + "inclVatSimple": "incl. IVA", "priceUnit": "{{price}}/{{unit}}", "new": "Nuovo", - "weeks": "settimane", + "weeks": "Settimane", "arriving": "Arrivo:", "inclVatFooter": "incl. {{vat}}% IVA,*", "availability": "Disponibilità", @@ -21,14 +22,14 @@ export default { "vatShort": "IVA", "weight": "Peso: {{weight}} kg", "youSave": "Risparmi: {{amount}}", - "cheaperThanIndividual": "Più conveniente che acquistare singolarmente", + "cheaperThanIndividual": "Più economico che acquistare singolarmente", "pickupPrice": "Prezzo ritiro: €19,90 per talea.", "consistsOf": "Composto da:", "loadingComponentDetails": "{{index}}. Caricamento dettagli componente...", "loadingProduct": "Caricamento prodotto...", "individualPriceTotal": "Prezzo totale individuale:", "setPrice": "Prezzo set:", - "yourSavings": "I tuoi risparmi:", + "yourSavings": "Il tuo risparmio:", "similarProducts": "Prodotti simili", "countDisplay": { "noProducts": "0 prodotti", diff --git a/src/i18n/locales/it/productDialogs.js b/src/i18n/locales/it/productDialogs.js new file mode 100644 index 0000000..10a3d50 --- /dev/null +++ b/src/i18n/locales/it/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Domanda sul prodotto", + "questionSubtitle": "Hai una domanda su questo prodotto? Siamo felici di aiutarti.", + "questionSuccess": "Grazie per la tua domanda! Ti risponderemo il prima possibile.", + "nameLabel": "Nome", + "namePlaceholder": "Il tuo nome", + "emailLabel": "Email", + "emailPlaceholder": "tuo.email@example.com", + "questionLabel": "La tua domanda", + "questionPlaceholder": "Descrivi la tua domanda su questo prodotto...", + "photosLabelQuestion": "Allega foto alla tua domanda (opzionale)", + "submitQuestion": "Invia domanda", + "sending": "Invio in corso...", + + "ratingTitle": "Valuta il prodotto", + "ratingSubtitle": "Condividi la tua esperienza con questo prodotto e aiuta altri clienti a prendere una decisione.", + "ratingSuccess": "Grazie per la tua recensione! Sarà pubblicata dopo verifica.", + "emailHelper": "La tua email non sarà pubblicata", + "ratingLabel": "Valutazione *", + "pleaseRate": "Per favore valuta", + "ratingStars": "{{rating}} su 5 stelle", + "reviewLabel": "La tua recensione (opzionale)", + "reviewPlaceholder": "Descrivi la tua esperienza con questo prodotto...", + "photosLabelRating": "Allega foto alla tua recensione (opzionale)", + "submitRating": "Invia recensione", + "errorGeneric": "Si è verificato un errore", + "errorPhotos": "Errore durante l'elaborazione delle foto", + + "availabilityTitle": "Richiedi disponibilità", + "availabilitySubtitle": "Questo prodotto non è attualmente disponibile. Saremo felici di informarti non appena sarà di nuovo disponibile.", + "availabilitySuccessEmail": "Grazie per la tua richiesta! Ti informeremo via email non appena il prodotto sarà di nuovo disponibile.", + "availabilitySuccessTelegram": "Grazie per la tua richiesta! Ti informeremo tramite Telegram non appena il prodotto sarà di nuovo disponibile.", + "notificationMethodLabel": "Come desideri essere notificato?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@tuoNomeTelegram o Telegram ID", + "telegramHelper": "Inserisci il tuo nome utente Telegram (con @) o Telegram ID", + "messageLabel": "Messaggio (opzionale)", + "messagePlaceholder": "Informazioni aggiuntive o domande...", + "submitAvailability": "Richiedi disponibilità", + + "photoUploadSelect": "Seleziona foto", + "photoUploadErrorMaxFiles": "Massimo {{max}} file consentiti", + "photoUploadErrorFileType": "Sono consentiti solo file immagine (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "File troppo grande. Massimo: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} file selezionato(i)", + "photoUploadCompressed": "(compresso per il caricamento)", + "photoUploadRemove": "Rimuovi immagine", + "photoUploadLabelDefault": "Allega foto (opzionale)", + + "shareTitle": "Condividi", + "shareEmbed": "Incorpora", + "shareCopyLink": "Copia link", + "shareSuccessEmbed": "Codice di incorporamento copiato negli appunti!", + "shareErrorEmbed": "Errore durante la copia del codice di incorporamento", + "shareSuccessLink": "Link copiato negli appunti!", + "shareWhatsAppText": "Dai un'occhiata a questo prodotto: {{name}}", + "shareTelegramText": "Dai un'occhiata a questo prodotto: {{name}}", + "shareEmailSubject": "Raccomandazione prodotto", + "shareEmailBody": "Ciao,\n\nvorrei consigliarti questo prodotto:\n\n{{name}}\n{{url}}\n\nCordiali saluti" +}; diff --git a/src/i18n/locales/pl/index.js b/src/i18n/locales/pl/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/pl/index.js +++ b/src/i18n/locales/pl/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/pl/product.js b/src/i18n/locales/pl/product.js index 2d6b4ae..4e7f277 100644 --- a/src/i18n/locales/pl/product.js +++ b/src/i18n/locales/pl/product.js @@ -8,25 +8,26 @@ export default { "articleNumber": "Numer artykułu", "manufacturer": "Producent", "inclVat": "zawiera {{vat}}% VAT", + "inclVatSimple": "z VAT", "priceUnit": "{{price}}/{{unit}}", "new": "Nowy", - "weeks": "tygodnie", + "weeks": "Tygodnie", "arriving": "Przyjazd:", "inclVatFooter": "zawiera {{vat}}% VAT,*", "availability": "Dostępność", - "inStock": "w magazynie", + "inStock": "na stanie", "comingSoon": "Wkrótce dostępne", "deliveryTime": "Czas dostawy", - "inclShort": "zawiera", + "inclShort": "zaw.", "vatShort": "VAT", "weight": "Waga: {{weight}} kg", "youSave": "Oszczędzasz: {{amount}}", - "cheaperThanIndividual": "Tańsze niż kupowanie osobno", + "cheaperThanIndividual": "Tańsze niż zakup pojedynczy", "pickupPrice": "Cena odbioru: 19,90 € za sadzonkę.", "consistsOf": "Składa się z:", "loadingComponentDetails": "{{index}}. Ładowanie szczegółów komponentu...", - "loadingProduct": "Produkt jest ładowany...", - "individualPriceTotal": "Całkowita cena indywidualna:", + "loadingProduct": "Ładowanie produktu...", + "individualPriceTotal": "Łączna cena pojedyncza:", "setPrice": "Cena zestawu:", "yourSavings": "Twoje oszczędności:", "similarProducts": "Podobne produkty", diff --git a/src/i18n/locales/pl/productDialogs.js b/src/i18n/locales/pl/productDialogs.js new file mode 100644 index 0000000..9017028 --- /dev/null +++ b/src/i18n/locales/pl/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Pytanie o produkt", + "questionSubtitle": "Masz pytanie dotyczące tego produktu? Chętnie pomożemy.", + "questionSuccess": "Dziękujemy za Twoje pytanie! Skontaktujemy się z Tobą jak najszybciej.", + "nameLabel": "Imię", + "namePlaceholder": "Twoje imię", + "emailLabel": "Email", + "emailPlaceholder": "twoj.email@przyklad.com", + "questionLabel": "Twoje pytanie", + "questionPlaceholder": "Opisz swoje pytanie dotyczące tego produktu...", + "photosLabelQuestion": "Dołącz zdjęcia do pytania (opcjonalnie)", + "submitQuestion": "Wyślij pytanie", + "sending": "Wysyłanie...", + + "ratingTitle": "Oceń produkt", + "ratingSubtitle": "Podziel się swoimi doświadczeniami z tym produktem i pomóż innym klientom podjąć decyzję.", + "ratingSuccess": "Dziękujemy za Twoją opinię! Zostanie opublikowana po weryfikacji.", + "emailHelper": "Twój email nie zostanie opublikowany", + "ratingLabel": "Ocena *", + "pleaseRate": "Proszę oceń", + "ratingStars": "{{rating}} z 5 gwiazdek", + "reviewLabel": "Twoja opinia (opcjonalnie)", + "reviewPlaceholder": "Opisz swoje doświadczenia z tym produktem...", + "photosLabelRating": "Dołącz zdjęcia do opinii (opcjonalnie)", + "submitRating": "Prześlij opinię", + "errorGeneric": "Wystąpił błąd", + "errorPhotos": "Błąd podczas przetwarzania zdjęć", + + "availabilityTitle": "Zapytaj o dostępność", + "availabilitySubtitle": "Ten produkt jest obecnie niedostępny. Poinformujemy Cię, gdy tylko będzie ponownie dostępny.", + "availabilitySuccessEmail": "Dziękujemy za zapytanie! Poinformujemy Cię mailowo, gdy produkt będzie ponownie dostępny.", + "availabilitySuccessTelegram": "Dziękujemy za zapytanie! Poinformujemy Cię przez Telegram, gdy produkt będzie ponownie dostępny.", + "notificationMethodLabel": "Jak chcesz otrzymać powiadomienie?", + "telegramBotLabel": "Bot Telegram", + "telegramIdLabel": "ID Telegram", + "telegramPlaceholder": "@twojTelegram lub ID Telegram", + "telegramHelper": "Wpisz swoją nazwę użytkownika Telegram (z @) lub ID Telegram", + "messageLabel": "Wiadomość (opcjonalnie)", + "messagePlaceholder": "Dodatkowe informacje lub pytania...", + "submitAvailability": "Zapytaj o dostępność", + + "photoUploadSelect": "Wybierz zdjęcia", + "photoUploadErrorMaxFiles": "Dozwolona maksymalna liczba plików to {{max}}", + "photoUploadErrorFileType": "Dozwolone są tylko pliki graficzne (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Plik jest za duży. Maksymalny rozmiar: {{maxSize}}MB", + "photoUploadSelectedFiles": "Wybrano {{count}} plik(ów)", + "photoUploadCompressed": "(skompresowane do wysłania)", + "photoUploadRemove": "Usuń obraz", + "photoUploadLabelDefault": "Dołącz zdjęcia (opcjonalnie)", + + "shareTitle": "Udostępnij", + "shareEmbed": "Osadź", + "shareCopyLink": "Kopiuj link", + "shareSuccessEmbed": "Kod do osadzenia skopiowany do schowka!", + "shareErrorEmbed": "Błąd podczas kopiowania kodu do osadzenia", + "shareSuccessLink": "Link skopiowany do schowka!", + "shareWhatsAppText": "Sprawdź ten produkt: {{name}}", + "shareTelegramText": "Sprawdź ten produkt: {{name}}", + "shareEmailSubject": "Polecenie produktu", + "shareEmailBody": "Cześć,\n\nChciałbym polecić Ci ten produkt:\n\n{{name}}\n{{url}}\n\nPozdrawiam" +}; diff --git a/src/i18n/locales/ro/index.js b/src/i18n/locales/ro/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/ro/index.js +++ b/src/i18n/locales/ro/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/ro/product.js b/src/i18n/locales/ro/product.js index 1bb3d72..9158eb0 100644 --- a/src/i18n/locales/ro/product.js +++ b/src/i18n/locales/ro/product.js @@ -8,14 +8,15 @@ export default { "articleNumber": "Număr articol", "manufacturer": "Producător", "inclVat": "incl. {{vat}}% TVA", + "inclVatSimple": "incl. TVA", "priceUnit": "{{price}}/{{unit}}", "new": "Nou", - "weeks": "săptămâni", + "weeks": "Săptămâni", "arriving": "Sosire:", "inclVatFooter": "incl. {{vat}}% TVA,*", "availability": "Disponibilitate", "inStock": "în stoc", - "comingSoon": "În curând disponibil", + "comingSoon": "În curând", "deliveryTime": "Timp de livrare", "inclShort": "incl.", "vatShort": "TVA", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Preț ridicare: 19,90 € per butaș.", "consistsOf": "Constă din:", "loadingComponentDetails": "{{index}}. Se încarcă detalii componentă...", - "loadingProduct": "Produsul se încarcă...", + "loadingProduct": "Se încarcă produsul...", "individualPriceTotal": "Preț individual total:", "setPrice": "Preț set:", "yourSavings": "Economiile dvs.:", diff --git a/src/i18n/locales/ro/productDialogs.js b/src/i18n/locales/ro/productDialogs.js new file mode 100644 index 0000000..2bbcca1 --- /dev/null +++ b/src/i18n/locales/ro/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Întrebare despre produs", + "questionSubtitle": "Aveți o întrebare despre acest produs? Suntem bucuroși să vă ajutăm.", + "questionSuccess": "Vă mulțumim pentru întrebare! Vă vom contacta cât mai curând posibil.", + "nameLabel": "Nume", + "namePlaceholder": "Numele dumneavoastră", + "emailLabel": "Email", + "emailPlaceholder": "adresa.dumneavoastră@example.com", + "questionLabel": "Întrebarea dumneavoastră", + "questionPlaceholder": "Descrieți întrebarea dumneavoastră despre acest produs...", + "photosLabelQuestion": "Atașați fotografii la întrebare (opțional)", + "submitQuestion": "Trimite întrebare", + "sending": "Se trimite...", + + "ratingTitle": "Evaluează produsul", + "ratingSubtitle": "Împărtășiți experiența dumneavoastră cu acest produs și ajutați alți clienți să ia o decizie.", + "ratingSuccess": "Vă mulțumim pentru recenzie! Aceasta va fi publicată după verificare.", + "emailHelper": "Emailul dumneavoastră nu va fi publicat", + "ratingLabel": "Evaluare *", + "pleaseRate": "Vă rugăm să evaluați", + "ratingStars": "{{rating}} din 5 stele", + "reviewLabel": "Recenzia dumneavoastră (opțional)", + "reviewPlaceholder": "Descrieți experiențele dumneavoastră cu acest produs...", + "photosLabelRating": "Atașați fotografii la recenzie (opțional)", + "submitRating": "Trimite recenzia", + "errorGeneric": "A apărut o eroare", + "errorPhotos": "Eroare la procesarea fotografiilor", + + "availabilityTitle": "Solicită disponibilitate", + "availabilitySubtitle": "Acest produs nu este disponibil momentan. Vă vom informa cu plăcere de îndată ce va fi din nou în stoc.", + "availabilitySuccessEmail": "Vă mulțumim pentru solicitare! Vă vom notifica prin email de îndată ce produsul va fi din nou disponibil.", + "availabilitySuccessTelegram": "Vă mulțumim pentru solicitare! Vă vom notifica prin Telegram de îndată ce produsul va fi din nou disponibil.", + "notificationMethodLabel": "Cum doriți să fiți notificat?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@numeleTauTelegram sau Telegram ID", + "telegramHelper": "Introduceți numele dumneavoastră de utilizator Telegram (cu @) sau Telegram ID", + "messageLabel": "Mesaj (opțional)", + "messagePlaceholder": "Informații suplimentare sau întrebări...", + "submitAvailability": "Solicită disponibilitate", + + "photoUploadSelect": "Selectați fotografii", + "photoUploadErrorMaxFiles": "Maximum {{max}} fișiere permise", + "photoUploadErrorFileType": "Sunt permise doar fișiere imagine (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Fișier prea mare. Maxim: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} fișier(e) selectat(e)", + "photoUploadCompressed": "(comprimat pentru încărcare)", + "photoUploadRemove": "Elimină imaginea", + "photoUploadLabelDefault": "Atașați fotografii (opțional)", + + "shareTitle": "Distribuie", + "shareEmbed": "Încorporează", + "shareCopyLink": "Copiază linkul", + "shareSuccessEmbed": "Codul de încorporare a fost copiat în clipboard!", + "shareErrorEmbed": "Eroare la copierea codului de încorporare", + "shareSuccessLink": "Linkul a fost copiat în clipboard!", + "shareWhatsAppText": "Vezi acest produs: {{name}}", + "shareTelegramText": "Vezi acest produs: {{name}}", + "shareEmailSubject": "Recomandare produs", + "shareEmailBody": "Bună,\n\nAș dori să-ți recomand acest produs:\n\n{{name}}\n{{url}}\n\nCu stimă" +}; diff --git a/src/i18n/locales/ru/index.js b/src/i18n/locales/ru/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/ru/index.js +++ b/src/i18n/locales/ru/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/ru/product.js b/src/i18n/locales/ru/product.js index 6d67249..f279cd9 100644 --- a/src/i18n/locales/ru/product.js +++ b/src/i18n/locales/ru/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Артикул", "manufacturer": "Производитель", "inclVat": "включая {{vat}}% НДС", + "inclVatSimple": "включая НДС", "priceUnit": "{{price}}/{{unit}}", "new": "Новый", - "weeks": "недели", + "weeks": "Недели", "arriving": "Прибытие:", "inclVatFooter": "включая {{vat}}% НДС,*", "availability": "Наличие", @@ -22,10 +23,10 @@ export default { "weight": "Вес: {{weight}} кг", "youSave": "Вы экономите: {{amount}}", "cheaperThanIndividual": "Дешевле, чем покупать по отдельности", - "pickupPrice": "Цена при самовывозе: €19.90 за черенок.", + "pickupPrice": "Цена при самовывозе: 19,90 € за черенок.", "consistsOf": "Состоит из:", "loadingComponentDetails": "{{index}}. Загрузка деталей компонента...", - "loadingProduct": "Продукт загружается...", + "loadingProduct": "Загрузка продукта...", "individualPriceTotal": "Общая цена по отдельности:", "setPrice": "Цена набора:", "yourSavings": "Ваша экономия:", diff --git a/src/i18n/locales/ru/productDialogs.js b/src/i18n/locales/ru/productDialogs.js new file mode 100644 index 0000000..78eb2da --- /dev/null +++ b/src/i18n/locales/ru/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Вопрос о товаре", + "questionSubtitle": "У вас есть вопрос по этому товару? Мы рады помочь вам.", + "questionSuccess": "Спасибо за ваш вопрос! Мы свяжемся с вами как можно скорее.", + "nameLabel": "Имя", + "namePlaceholder": "Ваше имя", + "emailLabel": "Электронная почта", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "Ваш вопрос", + "questionPlaceholder": "Опишите ваш вопрос по этому товару...", + "photosLabelQuestion": "Прикрепите фотографии к вашему вопросу (необязательно)", + "submitQuestion": "Отправить вопрос", + "sending": "Отправка...", + + "ratingTitle": "Оцените товар", + "ratingSubtitle": "Поделитесь своим опытом использования этого товара и помогите другим покупателям сделать выбор.", + "ratingSuccess": "Спасибо за ваш отзыв! Он будет опубликован после проверки.", + "emailHelper": "Ваш email не будет опубликован", + "ratingLabel": "Оценка *", + "pleaseRate": "Пожалуйста, оцените", + "ratingStars": "{{rating}} из 5 звезд", + "reviewLabel": "Ваш отзыв (необязательно)", + "reviewPlaceholder": "Опишите ваш опыт использования этого товара...", + "photosLabelRating": "Прикрепите фотографии к вашему отзыву (необязательно)", + "submitRating": "Отправить отзыв", + "errorGeneric": "Произошла ошибка", + "errorPhotos": "Ошибка при обработке фотографий", + + "availabilityTitle": "Запросить наличие", + "availabilitySubtitle": "Этот товар в настоящее время недоступен. Мы с радостью сообщим вам, как только он появится в наличии.", + "availabilitySuccessEmail": "Спасибо за ваш запрос! Мы уведомим вас по электронной почте, как только товар снова будет доступен.", + "availabilitySuccessTelegram": "Спасибо за ваш запрос! Мы уведомим вас через Telegram, как только товар снова будет доступен.", + "notificationMethodLabel": "Как вы хотите получить уведомление?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@yourTelegramName or Telegram ID", + "telegramHelper": "Введите ваше имя пользователя Telegram (с @) или Telegram ID", + "messageLabel": "Сообщение (необязательно)", + "messagePlaceholder": "Дополнительная информация или вопросы...", + "submitAvailability": "Запросить наличие", + + "photoUploadSelect": "Выбрать фотографии", + "photoUploadErrorMaxFiles": "Максимум разрешено {{max}} файлов", + "photoUploadErrorFileType": "Разрешены только изображения (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Файл слишком большой. Максимум: {{maxSize}}МБ", + "photoUploadSelectedFiles": "Выбрано {{count}} файл(ов)", + "photoUploadCompressed": "(сжат для загрузки)", + "photoUploadRemove": "Удалить изображение", + "photoUploadLabelDefault": "Прикрепить фотографии (необязательно)", + + "shareTitle": "Поделиться", + "shareEmbed": "Встроить", + "shareCopyLink": "Копировать ссылку", + "shareSuccessEmbed": "Код для встраивания скопирован в буфер обмена!", + "shareErrorEmbed": "Ошибка при копировании кода для встраивания", + "shareSuccessLink": "Ссылка скопирована в буфер обмена!", + "shareWhatsAppText": "Посмотрите этот товар: {{name}}", + "shareTelegramText": "Посмотрите этот товар: {{name}}", + "shareEmailSubject": "Рекомендация товара", + "shareEmailBody": "Здравствуйте,\n\nХочу порекомендовать вам этот товар:\n\n{{name}}\n{{url}}\n\nС наилучшими пожеланиями" +}; diff --git a/src/i18n/locales/sk/index.js b/src/i18n/locales/sk/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/sk/index.js +++ b/src/i18n/locales/sk/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/sk/product.js b/src/i18n/locales/sk/product.js index dfc632d..418854f 100644 --- a/src/i18n/locales/sk/product.js +++ b/src/i18n/locales/sk/product.js @@ -1,16 +1,17 @@ export default { - "loading": "Načítava sa produkt...", - "loadingDescription": "Načítava sa popis produktu...", + "loading": "Načítavam produkt...", + "loadingDescription": "Načítavam popis produktu...", "notFound": "Produkt nenájdený", "notFoundDescription": "Produkt, ktorý hľadáte, neexistuje alebo bol odstránený.", "backToHome": "Späť na domovskú stránku", "error": "Chyba", - "articleNumber": "Číslo článku", + "articleNumber": "Číslo produktu", "manufacturer": "Výrobca", "inclVat": "vrátane {{vat}}% DPH", + "inclVatSimple": "vrátane DPH", "priceUnit": "{{price}}/{{unit}}", "new": "Nové", - "weeks": "týždne", + "weeks": "Týždne", "arriving": "Príchod:", "inclVatFooter": "vrátane {{vat}}% DPH,*", "availability": "Dostupnosť", @@ -24,8 +25,8 @@ export default { "cheaperThanIndividual": "Lacnejšie ako kúpa jednotlivých kusov", "pickupPrice": "Cena pri osobnom odbere: 19,90 € za odrezok.", "consistsOf": "Skladá sa z:", - "loadingComponentDetails": "{{index}}. Načítavajú sa detaily komponentu...", - "loadingProduct": "Produkt sa načítava...", + "loadingComponentDetails": "{{index}}. Načítavam detaily komponentu...", + "loadingProduct": "Načítavam produkt...", "individualPriceTotal": "Celková cena jednotlivých kusov:", "setPrice": "Cena setu:", "yourSavings": "Vaša úspora:", diff --git a/src/i18n/locales/sk/productDialogs.js b/src/i18n/locales/sk/productDialogs.js new file mode 100644 index 0000000..619296b --- /dev/null +++ b/src/i18n/locales/sk/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Otázka o produkte", + "questionSubtitle": "Máte otázku ohľadom tohto produktu? Radi vám pomôžeme.", + "questionSuccess": "Ďakujeme za vašu otázku! Čoskoro sa vám ozveme.", + "nameLabel": "Meno", + "namePlaceholder": "Vaše meno", + "emailLabel": "Email", + "emailPlaceholder": "vas.email@priklad.sk", + "questionLabel": "Vaša otázka", + "questionPlaceholder": "Popíšte svoju otázku ohľadom tohto produktu...", + "photosLabelQuestion": "Priložte fotografie k vašej otázke (voliteľné)", + "submitQuestion": "Odoslať otázku", + "sending": "Odosielanie...", + + "ratingTitle": "Ohodnoťte produkt", + "ratingSubtitle": "Podeľte sa o svoje skúsenosti s týmto produktom a pomôžte ostatným zákazníkom pri rozhodovaní.", + "ratingSuccess": "Ďakujeme za vašu recenziu! Bude zverejnená po overení.", + "emailHelper": "Váš email nebude zverejnený", + "ratingLabel": "Hodnotenie *", + "pleaseRate": "Prosím ohodnoťte", + "ratingStars": "{{rating}} z 5 hviezdičiek", + "reviewLabel": "Vaša recenzia (voliteľné)", + "reviewPlaceholder": "Popíšte svoje skúsenosti s týmto produktom...", + "photosLabelRating": "Priložte fotografie k vašej recenzii (voliteľné)", + "submitRating": "Odoslať recenziu", + "errorGeneric": "Vyskytla sa chyba", + "errorPhotos": "Chyba pri spracovaní fotografií", + + "availabilityTitle": "Požiadať o dostupnosť", + "availabilitySubtitle": "Tento produkt momentálne nie je dostupný. Radi vás budeme informovať, akonáhle bude opäť na sklade.", + "availabilitySuccessEmail": "Ďakujeme za vašu žiadosť! O dostupnosti produktu vás budeme informovať emailom.", + "availabilitySuccessTelegram": "Ďakujeme za vašu žiadosť! O dostupnosti produktu vás budeme informovať cez Telegram.", + "notificationMethodLabel": "Ako by ste chceli byť informovaní?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@vasTelegramMeno alebo Telegram ID", + "telegramHelper": "Zadajte svoje Telegram používateľské meno (s @) alebo Telegram ID", + "messageLabel": "Správa (voliteľné)", + "messagePlaceholder": "Dodatočné informácie alebo otázky...", + "submitAvailability": "Požiadať o dostupnosť", + + "photoUploadSelect": "Vybrať fotografie", + "photoUploadErrorMaxFiles": "Maximálne povolených {{max}} súborov", + "photoUploadErrorFileType": "Povolené sú len obrázkové súbory (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Súbor je príliš veľký. Maximálne: {{maxSize}}MB", + "photoUploadSelectedFiles": "Vybraných {{count}} súborov", + "photoUploadCompressed": "(komprimované pre nahrávanie)", + "photoUploadRemove": "Odstrániť obrázok", + "photoUploadLabelDefault": "Priložiť fotografie (voliteľné)", + + "shareTitle": "Zdieľať", + "shareEmbed": "Vložiť", + "shareCopyLink": "Kopírovať odkaz", + "shareSuccessEmbed": "Kód na vloženie bol skopírovaný do schránky!", + "shareErrorEmbed": "Chyba pri kopírovaní kódu na vloženie", + "shareSuccessLink": "Odkaz bol skopírovaný do schránky!", + "shareWhatsAppText": "Pozrite si tento produkt: {{name}}", + "shareTelegramText": "Pozrite si tento produkt: {{name}}", + "shareEmailSubject": "Odporúčanie produktu", + "shareEmailBody": "Dobrý deň,\n\nchcel by som vám odporučiť tento produkt:\n\n{{name}}\n{{url}}\n\nS pozdravom" +}; diff --git a/src/i18n/locales/sl/index.js b/src/i18n/locales/sl/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/sl/index.js +++ b/src/i18n/locales/sl/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/sl/product.js b/src/i18n/locales/sl/product.js index b33d8fa..b554bb4 100644 --- a/src/i18n/locales/sl/product.js +++ b/src/i18n/locales/sl/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Številka artikla", "manufacturer": "Proizvajalec", "inclVat": "vključno z {{vat}}% DDV", + "inclVatSimple": "vključno z DDV", "priceUnit": "{{price}}/{{unit}}", "new": "Novo", - "weeks": "tedni", + "weeks": "Tedni", "arriving": "Prihod:", "inclVatFooter": "vključno z {{vat}}% DDV,*", "availability": "Razpoložljivost", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Cena prevzema: 19,90 € na potaknjenca.", "consistsOf": "Sestavljeno iz:", "loadingComponentDetails": "{{index}}. Nalaganje podrobnosti komponente...", - "loadingProduct": "Izdelek se nalaga...", + "loadingProduct": "Nalaganje izdelka...", "individualPriceTotal": "Skupna cena posamezno:", "setPrice": "Cena kompleta:", "yourSavings": "Vaš prihranek:", @@ -33,12 +34,12 @@ export default { "countDisplay": { "noProducts": "0 izdelkov", "oneProduct": "1 izdelek", - "multipleProducts": "{{count}} izdelki", + "multipleProducts": "{{count}} izdelkov", "filteredProducts": "{{filtered}} od {{total}} izdelkov", "filteredOneProduct": "{{filtered}} od 1 izdelka", "xOfYProducts": "{{x}} od {{y}} izdelkov" }, - "removeFiltersToSee": "Odstranite filtre, da vidite izdelke", + "removeFiltersToSee": "Odstranite filtre za prikaz izdelkov", "outOfStock": "Ni na zalogi", "fromXProducts": "od {{count}} izdelkov", "discount": { diff --git a/src/i18n/locales/sl/productDialogs.js b/src/i18n/locales/sl/productDialogs.js new file mode 100644 index 0000000..1a25638 --- /dev/null +++ b/src/i18n/locales/sl/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Vprašanje o izdelku", + "questionSubtitle": "Imate vprašanje o tem izdelku? Z veseljem vam pomagamo.", + "questionSuccess": "Hvala za vaše vprašanje! Odgovorili vam bomo čim prej.", + "nameLabel": "Ime", + "namePlaceholder": "Vaše ime", + "emailLabel": "E-pošta", + "emailPlaceholder": "vas.email@primer.si", + "questionLabel": "Vaše vprašanje", + "questionPlaceholder": "Opis vašega vprašanja o tem izdelku...", + "photosLabelQuestion": "Priložite fotografije k vašemu vprašanju (neobvezno)", + "submitQuestion": "Pošlji vprašanje", + "sending": "Pošiljanje...", + + "ratingTitle": "Oceni izdelek", + "ratingSubtitle": "Delite svoje izkušnje z izdelkom in pomagajte drugim kupcem pri odločitvi.", + "ratingSuccess": "Hvala za vašo oceno! Objavljena bo po preverjanju.", + "emailHelper": "Vaš e-poštni naslov ne bo objavljen", + "ratingLabel": "Ocena *", + "pleaseRate": "Prosimo, ocenite", + "ratingStars": "{{rating}} od 5 zvezdic", + "reviewLabel": "Vaša ocena (neobvezno)", + "reviewPlaceholder": "Opis vaših izkušenj s tem izdelkom...", + "photosLabelRating": "Priložite fotografije k vaši oceni (neobvezno)", + "submitRating": "Oddaj oceno", + "errorGeneric": "Prišlo je do napake", + "errorPhotos": "Napaka pri obdelavi fotografij", + + "availabilityTitle": "Povprašajte o razpoložljivosti", + "availabilitySubtitle": "Ta izdelek trenutno ni na voljo. Z veseljem vas bomo obvestili, ko bo spet na zalogi.", + "availabilitySuccessEmail": "Hvala za vaše povpraševanje! Obvestili vas bomo po e-pošti, ko bo izdelek spet na voljo.", + "availabilitySuccessTelegram": "Hvala za vaše povpraševanje! Obvestili vas bomo preko Telegrama, ko bo izdelek spet na voljo.", + "notificationMethodLabel": "Kako želite biti obveščeni?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@vašeTelegramIme ali Telegram ID", + "telegramHelper": "Vnesite svoje Telegram uporabniško ime (z @) ali Telegram ID", + "messageLabel": "Sporočilo (neobvezno)", + "messagePlaceholder": "Dodatne informacije ali vprašanja...", + "submitAvailability": "Povprašajte o razpoložljivosti", + + "photoUploadSelect": "Izberite fotografije", + "photoUploadErrorMaxFiles": "Dovoljeno največ {{max}} datotek", + "photoUploadErrorFileType": "Dovoljene so samo slikovne datoteke (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Datoteka je prevelika. Največ: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} datoteka(e) izbrana(e)", + "photoUploadCompressed": "(stisnjeno za nalaganje)", + "photoUploadRemove": "Odstrani sliko", + "photoUploadLabelDefault": "Priložite fotografije (neobvezno)", + + "shareTitle": "Deli", + "shareEmbed": "Vstavi", + "shareCopyLink": "Kopiraj povezavo", + "shareSuccessEmbed": "Koda za vstavljanje je bila kopirana v odložišče!", + "shareErrorEmbed": "Napaka pri kopiranju kode za vstavljanje", + "shareSuccessLink": "Povezava je bila kopirana v odložišče!", + "shareWhatsAppText": "Oglejte si ta izdelek: {{name}}", + "shareTelegramText": "Oglejte si ta izdelek: {{name}}", + "shareEmailSubject": "Priporočilo izdelka", + "shareEmailBody": "Pozdravljeni,\n\nrad bi vam priporočil ta izdelek:\n\n{{name}}\n{{url}}\n\nLep pozdrav" +}; diff --git a/src/i18n/locales/sq/index.js b/src/i18n/locales/sq/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/sq/index.js +++ b/src/i18n/locales/sq/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/sq/product.js b/src/i18n/locales/sq/product.js index bb5789c..e8be81d 100644 --- a/src/i18n/locales/sq/product.js +++ b/src/i18n/locales/sq/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Numri i artikullit", "manufacturer": "Prodhuesi", "inclVat": "përfshirë {{vat}}% TVSH", + "inclVatSimple": "përfshirë TVSH", "priceUnit": "{{price}}/{{unit}}", "new": "I ri", - "weeks": "javë", + "weeks": "Javë", "arriving": "Arritja:", "inclVatFooter": "përfshirë {{vat}}% TVSH,*", "availability": "Disponueshmëria", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Çmimi për marrje: 19,90 € për prerje.", "consistsOf": "Përbëhet nga:", "loadingComponentDetails": "{{index}}. Duke ngarkuar detajet e komponentit...", - "loadingProduct": "Produkti po ngarkohet...", + "loadingProduct": "Duke ngarkuar produktin...", "individualPriceTotal": "Çmimi total individual:", "setPrice": "Çmimi i setit:", "yourSavings": "Kursimet tuaja:", diff --git a/src/i18n/locales/sq/productDialogs.js b/src/i18n/locales/sq/productDialogs.js new file mode 100644 index 0000000..1ddde15 --- /dev/null +++ b/src/i18n/locales/sq/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Pyetje rreth produktit", + "questionSubtitle": "Keni një pyetje rreth këtij produkti? Ne jemi të lumtur t'ju ndihmojmë.", + "questionSuccess": "Faleminderit për pyetjen tuaj! Do t'ju kontaktojmë sa më shpejt të jetë e mundur.", + "nameLabel": "Emri", + "namePlaceholder": "Emri juaj", + "emailLabel": "Email", + "emailPlaceholder": "emaili.juaj@example.com", + "questionLabel": "Pyetja juaj", + "questionPlaceholder": "Përshkruani pyetjen tuaj rreth këtij produkti...", + "photosLabelQuestion": "Bashkëngjitni foto me pyetjen tuaj (opsionale)", + "submitQuestion": "Dërgo pyetjen", + "sending": "Duke dërguar...", + + "ratingTitle": "Vlerëso produktin", + "ratingSubtitle": "Ndani përvojën tuaj me këtë produkt dhe ndihmoni klientët e tjerë të marrin vendimin.", + "ratingSuccess": "Faleminderit për vlerësimin tuaj! Ai do të publikohet pas verifikimit.", + "emailHelper": "Emaili juaj nuk do të publikohet", + "ratingLabel": "Vlerësimi *", + "pleaseRate": "Ju lutemi vlerësoni", + "ratingStars": "{{rating}} nga 5 yje", + "reviewLabel": "Rishikimi juaj (opsional)", + "reviewPlaceholder": "Përshkruani përvojat tuaja me këtë produkt...", + "photosLabelRating": "Bashkëngjitni foto me rishikimin tuaj (opsionale)", + "submitRating": "Dërgo rishikimin", + "errorGeneric": "Ndodhi një gabim", + "errorPhotos": "Gabim gjatë përpunimit të fotove", + + "availabilityTitle": "Kërko disponueshmërinë", + "availabilitySubtitle": "Ky produkt aktualisht nuk është në dispozicion. Ne do të jemi të lumtur t'ju njoftojmë sapo të jetë përsëri në stok.", + "availabilitySuccessEmail": "Faleminderit për kërkesën tuaj! Do t'ju njoftojmë me email sapo produkti të jetë përsëri në dispozicion.", + "availabilitySuccessTelegram": "Faleminderit për kërkesën tuaj! Do t'ju njoftojmë përmes Telegram sapo produkti të jetë përsëri në dispozicion.", + "notificationMethodLabel": "Si dëshironi të njoftoheni?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@emriJuajTelegram ose Telegram ID", + "telegramHelper": "Shkruani emrin tuaj të përdoruesit në Telegram (me @) ose Telegram ID-në tuaj", + "messageLabel": "Mesazh (opsional)", + "messagePlaceholder": "Informacione shtesë ose pyetje...", + "submitAvailability": "Kërko disponueshmërinë", + + "photoUploadSelect": "Zgjidh foto", + "photoUploadErrorMaxFiles": "Maksimumi {{max}} skedarë të lejuar", + "photoUploadErrorFileType": "Lejohen vetëm skedarë imazhi (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Skedari është shumë i madh. Maksimumi: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} skedar(e) të zgjedhur", + "photoUploadCompressed": "(i kompresuar për ngarkim)", + "photoUploadRemove": "Hiq imazhin", + "photoUploadLabelDefault": "Bashkëngjit foto (opsionale)", + + "shareTitle": "Ndaj", + "shareEmbed": "Fut", + "shareCopyLink": "Kopjo lidhjen", + "shareSuccessEmbed": "Kodi i futjes u kopjua në memorien e përkohshme!", + "shareErrorEmbed": "Gabim gjatë kopjimit të kodit të futjes", + "shareSuccessLink": "Lidhja u kopjua në memorien e përkohshme!", + "shareWhatsAppText": "Shiko këtë produkt: {{name}}", + "shareTelegramText": "Shiko këtë produkt: {{name}}", + "shareEmailSubject": "Rekomandim produkti", + "shareEmailBody": "Përshëndetje,\n\nDëshiroj t'ju rekomandoj këtë produkt:\n\n{{name}}\n{{url}}\n\nMe respekt" +}; diff --git a/src/i18n/locales/sr/index.js b/src/i18n/locales/sr/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/sr/index.js +++ b/src/i18n/locales/sr/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/sr/product.js b/src/i18n/locales/sr/product.js index fb3c8b7..70abfcb 100644 --- a/src/i18n/locales/sr/product.js +++ b/src/i18n/locales/sr/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Broj artikla", "manufacturer": "Proizvođač", "inclVat": "uključujući {{vat}}% PDV", + "inclVatSimple": "uključujući PDV", "priceUnit": "{{price}}/{{unit}}", "new": "Novo", - "weeks": "nedelja", + "weeks": "Nedelje", "arriving": "Dolazak:", "inclVatFooter": "uključujući {{vat}}% PDV,*", "availability": "Dostupnost", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Cena preuzimanja: 19,90 € po reznici.", "consistsOf": "Sastoji se od:", "loadingComponentDetails": "{{index}}. Učitavanje detalja komponente...", - "loadingProduct": "Proizvod se učitava...", + "loadingProduct": "Učitavanje proizvoda...", "individualPriceTotal": "Ukupna pojedinačna cena:", "setPrice": "Cena kompleta:", "yourSavings": "Vaša ušteda:", @@ -45,6 +46,6 @@ export default { "from3Products": "od 3 proizvoda", "from5Products": "od 5 proizvoda", "from7Products": "od 7 proizvoda", - "moreProductsMoreSavings": "Što više proizvoda izaberete, više štedite!" + "moreProductsMoreSavings": "Što više proizvoda izaberete, to više štedite!" } }; diff --git a/src/i18n/locales/sr/productDialogs.js b/src/i18n/locales/sr/productDialogs.js new file mode 100644 index 0000000..1b80305 --- /dev/null +++ b/src/i18n/locales/sr/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Pitanje o proizvodu", + "questionSubtitle": "Imate li pitanje u vezi ovog proizvoda? Rado ćemo vam pomoći.", + "questionSuccess": "Hvala vam na pitanju! Javićemo vam se što je pre moguće.", + "nameLabel": "Ime", + "namePlaceholder": "Vaše ime", + "emailLabel": "Email", + "emailPlaceholder": "vas.email@example.com", + "questionLabel": "Vaše pitanje", + "questionPlaceholder": "Opišite svoje pitanje u vezi ovog proizvoda...", + "photosLabelQuestion": "Priložite fotografije uz pitanje (opciono)", + "submitQuestion": "Pošalji pitanje", + "sending": "Šalje se...", + + "ratingTitle": "Oceni proizvod", + "ratingSubtitle": "Podelite svoje iskustvo sa ovim proizvodom i pomozite drugim kupcima da donesu odluku.", + "ratingSuccess": "Hvala vam na oceni! Biće objavljena nakon provere.", + "emailHelper": "Vaš email neće biti objavljen", + "ratingLabel": "Ocena *", + "pleaseRate": "Molimo ocenite", + "ratingStars": "{{rating}} od 5 zvezdica", + "reviewLabel": "Vaša recenzija (opciono)", + "reviewPlaceholder": "Opišite svoja iskustva sa ovim proizvodom...", + "photosLabelRating": "Priložite fotografije uz recenziju (opciono)", + "submitRating": "Pošalji recenziju", + "errorGeneric": "Došlo je do greške", + "errorPhotos": "Greška pri obradi fotografija", + + "availabilityTitle": "Zahtevajte dostupnost", + "availabilitySubtitle": "Ovaj proizvod trenutno nije dostupan. Rado ćemo vas obavestiti čim ponovo bude na stanju.", + "availabilitySuccessEmail": "Hvala vam na zahtevu! Obavestićemo vas putem emaila čim proizvod ponovo bude dostupan.", + "availabilitySuccessTelegram": "Hvala vam na zahtevu! Obavestićemo vas putem Telegrama čim proizvod ponovo bude dostupan.", + "notificationMethodLabel": "Kako želite da budete obavešteni?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@vašeTelegramIme ili Telegram ID", + "telegramHelper": "Unesite svoje Telegram korisničko ime (sa @) ili Telegram ID", + "messageLabel": "Poruka (opciono)", + "messagePlaceholder": "Dodatne informacije ili pitanja...", + "submitAvailability": "Zahtevaj dostupnost", + + "photoUploadSelect": "Izaberite fotografije", + "photoUploadErrorMaxFiles": "Dozvoljeno je maksimalno {{max}} fajlova", + "photoUploadErrorFileType": "Dozvoljeni su samo slikovni fajlovi (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Fajl je prevelik. Maksimum: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} fajl(ova) izabrano", + "photoUploadCompressed": "(kompresovano za upload)", + "photoUploadRemove": "Ukloni sliku", + "photoUploadLabelDefault": "Priložite fotografije (opciono)", + + "shareTitle": "Podeli", + "shareEmbed": "Ugradi", + "shareCopyLink": "Kopiraj link", + "shareSuccessEmbed": "Kod za ugradnju je kopiran u međuspremnik!", + "shareErrorEmbed": "Greška pri kopiranju koda za ugradnju", + "shareSuccessLink": "Link je kopiran u međuspremnik!", + "shareWhatsAppText": "Pogledaj ovaj proizvod: {{name}}", + "shareTelegramText": "Pogledaj ovaj proizvod: {{name}}", + "shareEmailSubject": "Preporuka proizvoda", + "shareEmailBody": "Zdravo,\n\nŽelim da ti preporučim ovaj proizvod:\n\n{{name}}\n{{url}}\n\nSrdačan pozdrav" +}; diff --git a/src/i18n/locales/sv/index.js b/src/i18n/locales/sv/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/sv/index.js +++ b/src/i18n/locales/sv/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/sv/product.js b/src/i18n/locales/sv/product.js index 8867e97..510d762 100644 --- a/src/i18n/locales/sv/product.js +++ b/src/i18n/locales/sv/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Artikelnummer", "manufacturer": "Tillverkare", "inclVat": "inkl. {{vat}}% moms", + "inclVatSimple": "inkl. moms", "priceUnit": "{{price}}/{{unit}}", "new": "Ny", - "weeks": "veckor", + "weeks": "Veckor", "arriving": "Ankomst:", "inclVatFooter": "inkl. {{vat}}% moms,*", "availability": "Tillgänglighet", @@ -22,13 +23,13 @@ export default { "weight": "Vikt: {{weight}} kg", "youSave": "Du sparar: {{amount}}", "cheaperThanIndividual": "Billigare än att köpa separat", - "pickupPrice": "Avhämtningspris: 19,90 € per stickling.", + "pickupPrice": "Upphämtningspris: 19,90 € per stickling.", "consistsOf": "Består av:", "loadingComponentDetails": "{{index}}. Laddar komponentdetaljer...", - "loadingProduct": "Produkten laddas...", + "loadingProduct": "Laddar produkt...", "individualPriceTotal": "Total individuellt pris:", "setPrice": "Setpris:", - "yourSavings": "Din besparing:", + "yourSavings": "Dina besparingar:", "similarProducts": "Liknande produkter", "countDisplay": { "noProducts": "0 produkter", diff --git a/src/i18n/locales/sv/productDialogs.js b/src/i18n/locales/sv/productDialogs.js new file mode 100644 index 0000000..3d44621 --- /dev/null +++ b/src/i18n/locales/sv/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Fråga om produkten", + "questionSubtitle": "Har du en fråga om denna produkt? Vi hjälper dig gärna.", + "questionSuccess": "Tack för din fråga! Vi återkommer till dig så snart som möjligt.", + "nameLabel": "Namn", + "namePlaceholder": "Ditt namn", + "emailLabel": "E-post", + "emailPlaceholder": "din.epost@example.com", + "questionLabel": "Din fråga", + "questionPlaceholder": "Beskriv din fråga om denna produkt...", + "photosLabelQuestion": "Bifoga bilder till din fråga (valfritt)", + "submitQuestion": "Skicka fråga", + "sending": "Skickar...", + + "ratingTitle": "Betygsätt produkt", + "ratingSubtitle": "Dela din erfarenhet av denna produkt och hjälp andra kunder att fatta beslut.", + "ratingSuccess": "Tack för din recension! Den kommer att publiceras efter granskning.", + "emailHelper": "Din e-post kommer inte att publiceras", + "ratingLabel": "Betyg *", + "pleaseRate": "Vänligen betygsätt", + "ratingStars": "{{rating}} av 5 stjärnor", + "reviewLabel": "Din recension (valfritt)", + "reviewPlaceholder": "Beskriv dina erfarenheter av denna produkt...", + "photosLabelRating": "Bifoga bilder till din recension (valfritt)", + "submitRating": "Skicka recension", + "errorGeneric": "Ett fel uppstod", + "errorPhotos": "Fel vid bearbetning av bilder", + + "availabilityTitle": "Begär tillgänglighet", + "availabilitySubtitle": "Denna produkt är för närvarande inte tillgänglig. Vi meddelar dig gärna så snart den finns i lager igen.", + "availabilitySuccessEmail": "Tack för din förfrågan! Vi meddelar dig via e-post så snart produkten finns tillgänglig igen.", + "availabilitySuccessTelegram": "Tack för din förfrågan! Vi meddelar dig via Telegram så snart produkten finns tillgänglig igen.", + "notificationMethodLabel": "Hur vill du bli meddelad?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@dittTelegramNamn eller Telegram ID", + "telegramHelper": "Ange ditt Telegram-användarnamn (med @) eller Telegram ID", + "messageLabel": "Meddelande (valfritt)", + "messagePlaceholder": "Ytterligare information eller frågor...", + "submitAvailability": "Begär tillgänglighet", + + "photoUploadSelect": "Välj bilder", + "photoUploadErrorMaxFiles": "Maximalt {{max}} filer tillåtna", + "photoUploadErrorFileType": "Endast bildfiler (JPEG, PNG, GIF, WebP) är tillåtna", + "photoUploadErrorFileSize": "Filen är för stor. Max: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} fil(er) valda", + "photoUploadCompressed": "(komprimerad för uppladdning)", + "photoUploadRemove": "Ta bort bild", + "photoUploadLabelDefault": "Bifoga bilder (valfritt)", + + "shareTitle": "Dela", + "shareEmbed": "Bädda in", + "shareCopyLink": "Kopiera länk", + "shareSuccessEmbed": "Bäddningskod kopierad till urklipp!", + "shareErrorEmbed": "Fel vid kopiering av bäddningskoden", + "shareSuccessLink": "Länk kopierad till urklipp!", + "shareWhatsAppText": "Kolla in denna produkt: {{name}}", + "shareTelegramText": "Kolla in denna produkt: {{name}}", + "shareEmailSubject": "Produktrekommendation", + "shareEmailBody": "Hej,\n\nJag vill rekommendera denna produkt till dig:\n\n{{name}}\n{{url}}\n\nMed vänliga hälsningar" +}; diff --git a/src/i18n/locales/tr/index.js b/src/i18n/locales/tr/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/tr/index.js +++ b/src/i18n/locales/tr/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/tr/product.js b/src/i18n/locales/tr/product.js index 03384ea..4d2f1fb 100644 --- a/src/i18n/locales/tr/product.js +++ b/src/i18n/locales/tr/product.js @@ -8,9 +8,10 @@ export default { "articleNumber": "Makale numarası", "manufacturer": "Üretici", "inclVat": "%{{vat}} KDV dahil", + "inclVatSimple": "KDV dahil", "priceUnit": "{{price}}/{{unit}}", "new": "Yeni", - "weeks": "hafta", + "weeks": "Hafta", "arriving": "Geliş:", "inclVatFooter": "%{{vat}} KDV dahil,*", "availability": "Mevcutluk", @@ -22,14 +23,14 @@ export default { "weight": "Ağırlık: {{weight}} kg", "youSave": "Tasarruf edersiniz: {{amount}}", "cheaperThanIndividual": "Tek tek almaktan daha ucuz", - "pickupPrice": "Teslim alma fiyatı: kesim başına €19,90.", + "pickupPrice": "Teslim alma fiyatı: Kesim başına €19,90.", "consistsOf": "Şunlardan oluşur:", "loadingComponentDetails": "{{index}}. Bileşen detayları yükleniyor...", "loadingProduct": "Ürün yükleniyor...", "individualPriceTotal": "Toplam bireysel fiyat:", "setPrice": "Set fiyatı:", "yourSavings": "Tasarrufunuz:", - "similarProducts": "Benzer Ürünler", + "similarProducts": "Benzer ürünler", "countDisplay": { "noProducts": "0 ürün", "oneProduct": "1 ürün", diff --git a/src/i18n/locales/tr/productDialogs.js b/src/i18n/locales/tr/productDialogs.js new file mode 100644 index 0000000..e53d6b0 --- /dev/null +++ b/src/i18n/locales/tr/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Ürün hakkında soru", + "questionSubtitle": "Bu ürünle ilgili bir sorunuz mu var? Size yardımcı olmaktan memnuniyet duyarız.", + "questionSuccess": "Sorunuz için teşekkürler! En kısa sürede size geri döneceğiz.", + "nameLabel": "İsim", + "namePlaceholder": "Adınız", + "emailLabel": "E-posta", + "emailPlaceholder": "sizin.email@example.com", + "questionLabel": "Sorunuz", + "questionPlaceholder": "Bu ürünle ilgili sorunuzu açıklayın...", + "photosLabelQuestion": "Sorunuza fotoğraf ekleyin (isteğe bağlı)", + "submitQuestion": "Soruyu gönder", + "sending": "Gönderiliyor...", + + "ratingTitle": "Ürünü değerlendirin", + "ratingSubtitle": "Bu ürünle ilgili deneyimlerinizi paylaşın ve diğer müşterilerin karar vermesine yardımcı olun.", + "ratingSuccess": "Değerlendirmeniz için teşekkürler! İnceleme sonrası yayınlanacaktır.", + "emailHelper": "E-postanız yayınlanmayacaktır", + "ratingLabel": "Değerlendirme *", + "pleaseRate": "Lütfen değerlendirin", + "ratingStars": "{{rating}} üzerinden 5 yıldız", + "reviewLabel": "Yorumunuz (isteğe bağlı)", + "reviewPlaceholder": "Bu ürünle ilgili deneyimlerinizi açıklayın...", + "photosLabelRating": "Yorumunuza fotoğraf ekleyin (isteğe bağlı)", + "submitRating": "Yorumu gönder", + "errorGeneric": "Bir hata oluştu", + "errorPhotos": "Fotoğraflar işlenirken hata oluştu", + + "availabilityTitle": "Stok durumu talep et", + "availabilitySubtitle": "Bu ürün şu anda mevcut değil. Stoklara girdiğinde sizi bilgilendirmekten memnuniyet duyarız.", + "availabilitySuccessEmail": "Talebiniz için teşekkürler! Ürün tekrar mevcut olduğunda e-posta ile bilgilendirileceksiniz.", + "availabilitySuccessTelegram": "Talebiniz için teşekkürler! Ürün tekrar mevcut olduğunda Telegram üzerinden bilgilendirileceksiniz.", + "notificationMethodLabel": "Nasıl bilgilendirilmek istersiniz?", + "telegramBotLabel": "Telegram Botu", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@TelegramAdınız veya Telegram ID", + "telegramHelper": "Telegram kullanıcı adınızı (@ ile) veya Telegram ID'nizi girin", + "messageLabel": "Mesaj (isteğe bağlı)", + "messagePlaceholder": "Ek bilgiler veya sorular...", + "submitAvailability": "Stok durumu talep et", + + "photoUploadSelect": "Fotoğraf seç", + "photoUploadErrorMaxFiles": "En fazla {{max}} dosya izin verilir", + "photoUploadErrorFileType": "Sadece resim dosyalarına (JPEG, PNG, GIF, WebP) izin verilir", + "photoUploadErrorFileSize": "Dosya çok büyük. Maksimum: {{maxSize}}MB", + "photoUploadSelectedFiles": "{{count}} dosya seçildi", + "photoUploadCompressed": "(yükleme için sıkıştırıldı)", + "photoUploadRemove": "Resmi kaldır", + "photoUploadLabelDefault": "Fotoğraf ekle (isteğe bağlı)", + + "shareTitle": "Paylaş", + "shareEmbed": "Yerleştir", + "shareCopyLink": "Bağlantıyı kopyala", + "shareSuccessEmbed": "Yerleştirme kodu panoya kopyalandı!", + "shareErrorEmbed": "Yerleştirme kodu kopyalanırken hata oluştu", + "shareSuccessLink": "Bağlantı panoya kopyalandı!", + "shareWhatsAppText": "Bu ürüne göz atın: {{name}}", + "shareTelegramText": "Bu ürüne göz atın: {{name}}", + "shareEmailSubject": "Ürün tavsiyesi", + "shareEmailBody": "Merhaba,\n\nSize bu ürünü tavsiye etmek istiyorum:\n\n{{name}}\n{{url}}\n\nSaygılarımla" +}; diff --git a/src/i18n/locales/uk/index.js b/src/i18n/locales/uk/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/uk/index.js +++ b/src/i18n/locales/uk/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/uk/product.js b/src/i18n/locales/uk/product.js index 2b0d8ee..80c3efc 100644 --- a/src/i18n/locales/uk/product.js +++ b/src/i18n/locales/uk/product.js @@ -5,17 +5,18 @@ export default { "notFoundDescription": "Продукт, який ви шукаєте, не існує або був видалений.", "backToHome": "Повернутися на головну сторінку", "error": "Помилка", - "articleNumber": "Номер артикула", + "articleNumber": "Артикул", "manufacturer": "Виробник", "inclVat": "включно з {{vat}}% ПДВ", + "inclVatSimple": "включно з ПДВ", "priceUnit": "{{price}}/{{unit}}", "new": "Новий", - "weeks": "тижнів", + "weeks": "Тижнів", "arriving": "Прибуття:", "inclVatFooter": "включно з {{vat}}% ПДВ,*", "availability": "Наявність", "inStock": "в наявності", - "comingSoon": "Скоро буде", + "comingSoon": "Скоро в наявності", "deliveryTime": "Час доставки", "inclShort": "вкл.", "vatShort": "ПДВ", @@ -25,7 +26,7 @@ export default { "pickupPrice": "Ціна за самовивіз: €19.90 за живець.", "consistsOf": "Складається з:", "loadingComponentDetails": "{{index}}. Завантаження деталей компонента...", - "loadingProduct": "Продукт завантажується...", + "loadingProduct": "Завантаження продукту...", "individualPriceTotal": "Загальна ціна окремо:", "setPrice": "Ціна набору:", "yourSavings": "Ваша економія:", @@ -38,7 +39,7 @@ export default { "filteredOneProduct": "{{filtered}} з 1 продукту", "xOfYProducts": "{{x}} з {{y}} продуктів" }, - "removeFiltersToSee": "Видаліть фільтри, щоб побачити продукти", + "removeFiltersToSee": "Приберіть фільтри, щоб побачити продукти", "outOfStock": "Немає в наявності", "fromXProducts": "від {{count}} продуктів", "discount": { diff --git a/src/i18n/locales/uk/productDialogs.js b/src/i18n/locales/uk/productDialogs.js new file mode 100644 index 0000000..0c235d8 --- /dev/null +++ b/src/i18n/locales/uk/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "Питання про продукт", + "questionSubtitle": "У вас є питання щодо цього продукту? Ми раді допомогти вам.", + "questionSuccess": "Дякуємо за ваше питання! Ми зв’яжемося з вами якнайшвидше.", + "nameLabel": "Ім'я", + "namePlaceholder": "Ваше ім'я", + "emailLabel": "Електронна пошта", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "Ваше питання", + "questionPlaceholder": "Опишіть ваше питання щодо цього продукту...", + "photosLabelQuestion": "Додайте фото до вашого питання (необов’язково)", + "submitQuestion": "Надіслати питання", + "sending": "Надсилання...", + + "ratingTitle": "Оцінити продукт", + "ratingSubtitle": "Поділіться своїм досвідом використання цього продукту та допоможіть іншим клієнтам зробити вибір.", + "ratingSuccess": "Дякуємо за ваш відгук! Він буде опублікований після перевірки.", + "emailHelper": "Ваша електронна пошта не буде опублікована", + "ratingLabel": "Оцінка *", + "pleaseRate": "Будь ласка, оцініть", + "ratingStars": "{{rating}} з 5 зірок", + "reviewLabel": "Ваш відгук (необов’язково)", + "reviewPlaceholder": "Опишіть свій досвід з цим продуктом...", + "photosLabelRating": "Додайте фото до вашого відгуку (необов’язково)", + "submitRating": "Надіслати відгук", + "errorGeneric": "Сталася помилка", + "errorPhotos": "Помилка обробки фотографій", + + "availabilityTitle": "Запитати наявність", + "availabilitySubtitle": "Цей продукт наразі недоступний. Ми з радістю повідомимо вас, як тільки він з’явиться в наявності.", + "availabilitySuccessEmail": "Дякуємо за ваш запит! Ми повідомимо вас електронною поштою, як тільки продукт знову буде доступний.", + "availabilitySuccessTelegram": "Дякуємо за ваш запит! Ми повідомимо вас через Telegram, як тільки продукт знову буде доступний.", + "notificationMethodLabel": "Як ви хочете отримувати сповіщення?", + "telegramBotLabel": "Telegram Bot", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@yourTelegramName or Telegram ID", + "telegramHelper": "Введіть ваш Telegram-ім'я користувача (з @) або Telegram ID", + "messageLabel": "Повідомлення (необов’язково)", + "messagePlaceholder": "Додаткова інформація або питання...", + "submitAvailability": "Запитати наявність", + + "photoUploadSelect": "Вибрати фото", + "photoUploadErrorMaxFiles": "Максимум дозволено {{max}} файлів", + "photoUploadErrorFileType": "Дозволені лише зображення (JPEG, PNG, GIF, WebP)", + "photoUploadErrorFileSize": "Файл занадто великий. Максимум: {{maxSize}}MB", + "photoUploadSelectedFiles": "Вибрано {{count}} файл(ів)", + "photoUploadCompressed": "(скомпресовано для завантаження)", + "photoUploadRemove": "Видалити зображення", + "photoUploadLabelDefault": "Додати фото (необов’язково)", + + "shareTitle": "Поділитися", + "shareEmbed": "Вбудувати", + "shareCopyLink": "Копіювати посилання", + "shareSuccessEmbed": "Код для вбудовування скопійовано в буфер обміну!", + "shareErrorEmbed": "Помилка копіювання коду для вбудовування", + "shareSuccessLink": "Посилання скопійовано в буфер обміну!", + "shareWhatsAppText": "Перегляньте цей продукт: {{name}}", + "shareTelegramText": "Перегляньте цей продукт: {{name}}", + "shareEmailSubject": "Рекомендація продукту", + "shareEmailBody": "Привіт,\n\nХочу порекомендувати вам цей продукт:\n\n{{name}}\n{{url}}\n\nЗ найкращими побажаннями" +}; diff --git a/src/i18n/locales/zh/index.js b/src/i18n/locales/zh/index.js index 6eae892..1d9aa79 100644 --- a/src/i18n/locales/zh/index.js +++ b/src/i18n/locales/zh/index.js @@ -3,6 +3,7 @@ import navigation from './navigation.js'; import auth from './auth.js'; import cart from './cart.js'; import product from './product.js'; +import productDialogs from './productDialogs.js'; import search from './search.js'; import sorting from './sorting.js'; import chat from './chat.js'; @@ -35,6 +36,7 @@ export default { "auth": auth, "cart": cart, "product": product, + "productDialogs": productDialogs, "search": search, "sorting": sorting, "chat": chat, diff --git a/src/i18n/locales/zh/product.js b/src/i18n/locales/zh/product.js index 3166696..43a5971 100644 --- a/src/i18n/locales/zh/product.js +++ b/src/i18n/locales/zh/product.js @@ -8,13 +8,14 @@ export default { "articleNumber": "商品编号", "manufacturer": "制造商", "inclVat": "含 {{vat}}% 增值税", + "inclVatSimple": "含增值税", "priceUnit": "{{price}}/{{unit}}", "new": "新品", "weeks": "周", "arriving": "到货时间:", "inclVatFooter": "含 {{vat}}% 增值税,*", "availability": "库存情况", - "inStock": "有库存", + "inStock": "有现货", "comingSoon": "即将上市", "deliveryTime": "交货时间", "inclShort": "含", @@ -22,11 +23,11 @@ export default { "weight": "重量:{{weight}} 公斤", "youSave": "您节省了:{{amount}}", "cheaperThanIndividual": "比单独购买更便宜", - "pickupPrice": "自提价:每个插枝19.90欧元。", + "pickupPrice": "自取价:每个插枝19.90欧元。", "consistsOf": "包含:", "loadingComponentDetails": "{{index}}. 正在加载组件详情...", - "loadingProduct": "产品正在加载...", - "individualPriceTotal": "单件总价:", + "loadingProduct": "正在加载产品...", + "individualPriceTotal": "单独购买总价:", "setPrice": "套装价格:", "yourSavings": "您的节省:", "similarProducts": "类似产品", diff --git a/src/i18n/locales/zh/productDialogs.js b/src/i18n/locales/zh/productDialogs.js new file mode 100644 index 0000000..7092116 --- /dev/null +++ b/src/i18n/locales/zh/productDialogs.js @@ -0,0 +1,61 @@ +export default { + "questionTitle": "关于产品的问题", + "questionSubtitle": "您对该产品有疑问吗?我们很乐意为您提供帮助。", + "questionSuccess": "感谢您的提问!我们会尽快与您联系。", + "nameLabel": "姓名", + "namePlaceholder": "您的姓名", + "emailLabel": "电子邮件", + "emailPlaceholder": "your.email@example.com", + "questionLabel": "您的问题", + "questionPlaceholder": "描述您关于该产品的问题...", + "photosLabelQuestion": "附加照片(可选)", + "submitQuestion": "发送问题", + "sending": "发送中...", + + "ratingTitle": "评价产品", + "ratingSubtitle": "分享您对该产品的体验,帮助其他客户做出决定。", + "ratingSuccess": "感谢您的评价!审核通过后将予以发布。", + "emailHelper": "您的电子邮件不会被公开", + "ratingLabel": "评分 *", + "pleaseRate": "请评分", + "ratingStars": "{{rating}} 星,满分 5 星", + "reviewLabel": "您的评价(可选)", + "reviewPlaceholder": "描述您对该产品的体验...", + "photosLabelRating": "附加照片(可选)", + "submitRating": "提交评价", + "errorGeneric": "发生错误", + "errorPhotos": "处理照片时出错", + + "availabilityTitle": "请求库存信息", + "availabilitySubtitle": "该产品当前无货。我们会在恢复库存时通知您。", + "availabilitySuccessEmail": "感谢您的请求!产品恢复供应时,我们会通过电子邮件通知您。", + "availabilitySuccessTelegram": "感谢您的请求!产品恢复供应时,我们会通过 Telegram 通知您。", + "notificationMethodLabel": "您希望如何接收通知?", + "telegramBotLabel": "Telegram 机器人", + "telegramIdLabel": "Telegram ID", + "telegramPlaceholder": "@yourTelegramName 或 Telegram ID", + "telegramHelper": "请输入您的 Telegram 用户名(带 @)或 Telegram ID", + "messageLabel": "留言(可选)", + "messagePlaceholder": "附加信息或问题...", + "submitAvailability": "请求库存信息", + + "photoUploadSelect": "选择照片", + "photoUploadErrorMaxFiles": "最多允许 {{max}} 个文件", + "photoUploadErrorFileType": "仅允许图片文件(JPEG、PNG、GIF、WebP)", + "photoUploadErrorFileSize": "文件过大。最大:{{maxSize}}MB", + "photoUploadSelectedFiles": "已选择 {{count}} 个文件", + "photoUploadCompressed": "(上传时已压缩)", + "photoUploadRemove": "移除图片", + "photoUploadLabelDefault": "附加照片(可选)", + + "shareTitle": "分享", + "shareEmbed": "嵌入", + "shareCopyLink": "复制链接", + "shareSuccessEmbed": "嵌入代码已复制到剪贴板!", + "shareErrorEmbed": "复制嵌入代码时出错", + "shareSuccessLink": "链接已复制到剪贴板!", + "shareWhatsAppText": "看看这个产品:{{name}}", + "shareTelegramText": "看看这个产品:{{name}}", + "shareEmailSubject": "产品推荐", + "shareEmailBody": "您好,\n\n我想向您推荐这款产品:\n\n{{name}}\n{{url}}\n\n此致敬礼" +}; diff --git a/translate-i18n.js b/translate-i18n.js index 409c475..21157cd 100755 --- a/translate-i18n.js +++ b/translate-i18n.js @@ -17,6 +17,7 @@ const TRANSLATION_FILES = [ 'auth.js', 'cart.js', 'product.js', + 'productDialogs.js', 'search.js', 'sorting.js', 'chat.js', @@ -52,7 +53,7 @@ const LEGAL_FILES = [ ]; // Model configuration -const GERMAN_TO_ENGLISH_MODEL = 'gpt-4.1'; // High-quality model for German -> English (critical step) +const GERMAN_TO_ENGLISH_MODEL = 'gpt-5.1'; // High-quality model for German -> English (critical step) const ENGLISH_TO_OTHER_MODEL = 'gpt-4.1-mini'; // Faster/cheaper model for English -> Other languages // Supported languages for translation @@ -354,7 +355,7 @@ function writeTranslationFile(filePath, translationString) { } // Function to translate content using OpenAI (for German to English) -async function translateContent(content, systemPrompt, targetLanguage = null, model = 'gpt-4') { +async function translateContent(content, systemPrompt, targetLanguage = null, model = 'gpt-5.1') { try { const prompt = targetLanguage ? systemPrompt.replace(/{{targetLanguage}}/g, targetLanguage) @@ -366,8 +367,7 @@ async function translateContent(content, systemPrompt, targetLanguage = null, mo { role: 'system', content: prompt }, { role: 'user', content: `Please translate this translation file content:\n\n${content}` } ], - temperature: 0.1, - max_tokens: 4000 + reasoning_effort: "none", }); return response.choices[0].message.content; @@ -649,7 +649,7 @@ async function main() { // Check if OpenAI API key is set (only if we're doing actual translation) if (!skipEnglish && !OPENAI_API_KEY) { console.error('❌ OPENAI_API_KEY environment variable is not set'); - console.log('Please set your OpenAI API key: export OPENAI_API_KEY="your-api-key-here"'); + console.log('Hint: export `cat ../shopApi/.env |grep OPENAI` ; node translate-i18n.js'); process.exit(1); }