diff --git a/lang/ar/gallery.php b/lang/ar/gallery.php index a8af4a2c99d..970a637342b 100644 --- a/lang/ar/gallery.php +++ b/lang/ar/gallery.php @@ -77,6 +77,7 @@ 'share' => 'مشاركة الألبوم', 'embed' => 'تضمين الألبوم', 'move' => 'نقل الألبوم', + 'shop' => 'Shop Management', 'danger' => 'منطقة الخطر', ], 'hero' => [ diff --git a/lang/ar/maintenance.php b/lang/ar/maintenance.php index 8a5beaa192f..10018bcbec6 100644 --- a/lang/ar/maintenance.php +++ b/lang/ar/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'مسح ذاكرة التخزين المؤقت لكل مستخدم لحل مشاكل الإبطال.', 'button' => 'مسح', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/ar/webshop.php b/lang/ar/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/ar/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/cz/gallery.php b/lang/cz/gallery.php index 2af927f2461..cb4b38033f7 100644 --- a/lang/cz/gallery.php +++ b/lang/cz/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/cz/maintenance.php b/lang/cz/maintenance.php index 85b31c72365..432afd191ea 100644 --- a/lang/cz/maintenance.php +++ b/lang/cz/maintenance.php @@ -74,4 +74,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/cz/webshop.php b/lang/cz/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/cz/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/de/gallery.php b/lang/de/gallery.php index e917793c18b..67cb9ff06f6 100644 --- a/lang/de/gallery.php +++ b/lang/de/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Album teilen', 'embed' => 'Embed Album', 'move' => 'Album verschieben', + 'shop' => 'Shop Management', 'danger' => 'GEFAHRENZONE', ], 'hero' => [ diff --git a/lang/de/maintenance.php b/lang/de/maintenance.php index 9fedc24fc66..8fc7c55a2b8 100644 --- a/lang/de/maintenance.php +++ b/lang/de/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'Leeren Sie den Cache jedes Benutzers, um Ungültigkeitsprobleme zu lösen.', 'button' => 'Leeren', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/de/webshop.php b/lang/de/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/de/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/el/gallery.php b/lang/el/gallery.php index a5d43152784..10d66ab9659 100644 --- a/lang/el/gallery.php +++ b/lang/el/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/el/maintenance.php b/lang/el/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/el/maintenance.php +++ b/lang/el/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/el/webshop.php b/lang/el/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/el/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/en/gallery.php b/lang/en/gallery.php index 08bb60792f6..6ea1712a30f 100644 --- a/lang/en/gallery.php +++ b/lang/en/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/en/maintenance.php b/lang/en/maintenance.php index 482b9165e6f..80a7a552977 100644 --- a/lang/en/maintenance.php +++ b/lang/en/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/en/webshop.php b/lang/en/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/en/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/es/gallery.php b/lang/es/gallery.php index 6a79f4a51d6..c079820730a 100644 --- a/lang/es/gallery.php +++ b/lang/es/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Compartir álbum', 'embed' => 'Embed Album', 'move' => 'Mover álbum', + 'shop' => 'Shop Management', 'danger' => 'ZONA DE PELIGRO', ], 'hero' => [ diff --git a/lang/es/maintenance.php b/lang/es/maintenance.php index 529a33ff07c..252c8405112 100644 --- a/lang/es/maintenance.php +++ b/lang/es/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'Limpiar la caché de cada usuario para solucionar problemas de invalidación.', 'button' => 'Vaciar', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/es/webshop.php b/lang/es/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/es/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/fa/gallery.php b/lang/fa/gallery.php index a497b028a85..954b9a3184d 100644 --- a/lang/fa/gallery.php +++ b/lang/fa/gallery.php @@ -77,6 +77,7 @@ 'share' => 'اشتراک‌گذاری آلبوم', 'embed' => 'Embed Album', 'move' => 'انتقال آلبوم', + 'shop' => 'Shop Management', 'danger' => 'منطقه خطر', ], 'hero' => [ diff --git a/lang/fa/maintenance.php b/lang/fa/maintenance.php index c5064440600..c9a983e4b71 100644 --- a/lang/fa/maintenance.php +++ b/lang/fa/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'کش همه کاربران را برای حل مشکلات اعتبارسنجی پاک کنید.', 'button' => 'پاک سازی', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/fa/webshop.php b/lang/fa/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/fa/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/fr/gallery.php b/lang/fr/gallery.php index 6d0764fa11b..41b31d7a204 100644 --- a/lang/fr/gallery.php +++ b/lang/fr/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Partager l’album', 'embed' => 'Embed Album', 'move' => 'Déplacer l’album', + 'shop' => 'Shop Management', 'danger' => 'ZONE DANGEREUSE', ], 'hero' => [ diff --git a/lang/fr/maintenance.php b/lang/fr/maintenance.php index cda0b8b063c..a417440c21b 100644 --- a/lang/fr/maintenance.php +++ b/lang/fr/maintenance.php @@ -74,4 +74,14 @@ 'description' => 'Vider le cache de tous les utilisateurs pour résoudre les problèmes d’invalidation.', 'button' => 'Vider', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/fr/webshop.php b/lang/fr/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/fr/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/hu/gallery.php b/lang/hu/gallery.php index 33b99b53aee..7915092b103 100644 --- a/lang/hu/gallery.php +++ b/lang/hu/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/hu/maintenance.php b/lang/hu/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/hu/maintenance.php +++ b/lang/hu/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/hu/webshop.php b/lang/hu/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/hu/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/it/gallery.php b/lang/it/gallery.php index 927adad8203..30e32c9abd4 100644 --- a/lang/it/gallery.php +++ b/lang/it/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/it/maintenance.php b/lang/it/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/it/maintenance.php +++ b/lang/it/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/it/webshop.php b/lang/it/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/it/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/ja/gallery.php b/lang/ja/gallery.php index c7b499aff06..6300028cee5 100644 --- a/lang/ja/gallery.php +++ b/lang/ja/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/ja/maintenance.php b/lang/ja/maintenance.php index cfd346db92d..99405c3aa14 100644 --- a/lang/ja/maintenance.php +++ b/lang/ja/maintenance.php @@ -74,4 +74,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/ja/webshop.php b/lang/ja/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/ja/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/nl/gallery.php b/lang/nl/gallery.php index d86df0d13ef..84c469785f2 100644 --- a/lang/nl/gallery.php +++ b/lang/nl/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Deel Album', 'embed' => 'Embed Album', 'move' => 'Verplaats Album', + 'shop' => 'Shop Management', 'danger' => 'GEVAARZONE', ], 'hero' => [ diff --git a/lang/nl/maintenance.php b/lang/nl/maintenance.php index 78afed48ecc..95a37b27b82 100644 --- a/lang/nl/maintenance.php +++ b/lang/nl/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'Leeg de cache van elke gebruiker om invalidatieproblemen op te lossen.', 'button' => 'Leeg cache', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/nl/webshop.php b/lang/nl/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/nl/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/no/gallery.php b/lang/no/gallery.php index 8f6bb75b60f..1f708b76bbe 100644 --- a/lang/no/gallery.php +++ b/lang/no/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Del Album', 'embed' => 'Embed Album', 'move' => 'Flytt Album', + 'shop' => 'Shop Management', 'danger' => 'FARESONE', ], 'hero' => [ diff --git a/lang/no/maintenance.php b/lang/no/maintenance.php index 03190fcd23f..5f7af064d1c 100644 --- a/lang/no/maintenance.php +++ b/lang/no/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'Tøm hurtigbufferen til alle brukere for å løse ugyldighetsproblemer.', 'button' => 'Tøm', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/no/webshop.php b/lang/no/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/no/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/pl/gallery.php b/lang/pl/gallery.php index 769a9e4a3e5..026b3533191 100644 --- a/lang/pl/gallery.php +++ b/lang/pl/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Udostępnij album', 'embed' => 'Embed Album', 'move' => 'Przenieś album', + 'shop' => 'Shop Management', 'danger' => 'STREFA RYZYKOWNA', ], 'hero' => [ diff --git a/lang/pl/maintenance.php b/lang/pl/maintenance.php index 19183e28c9f..e7d3ac5e687 100644 --- a/lang/pl/maintenance.php +++ b/lang/pl/maintenance.php @@ -49,7 +49,7 @@ ], 'optimize' => [ 'title' => 'Optymalizacja bazy danych', - 'description' => 'Jeśli zauważysz spowolnienie w instalacji, może to być spowodowane tym, że baza danych + 'description' => 'Jeśli zauważysz spowolnienie w instalacji, może to być spowodowane tym, że baza danych nie ma wszystkich potrzebnych indeksów.', 'button' => 'Optymalizacja bazy danych', ], @@ -75,4 +75,14 @@ 'description' => 'Opróżnianie pamięci podręcznej każdego użytkownika w celu rozwiązania problemów z unieważnianiem.', 'button' => 'Opróżnianie', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/pl/webshop.php b/lang/pl/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/pl/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/pt/gallery.php b/lang/pt/gallery.php index 57800876821..9b715b31ee0 100644 --- a/lang/pt/gallery.php +++ b/lang/pt/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/pt/maintenance.php b/lang/pt/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/pt/maintenance.php +++ b/lang/pt/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/pt/webshop.php b/lang/pt/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/pt/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/ru/gallery.php b/lang/ru/gallery.php index 94c591b5ada..d8da65faa2e 100644 --- a/lang/ru/gallery.php +++ b/lang/ru/gallery.php @@ -76,6 +76,7 @@ 'share' => 'Поделиться альбомом', 'embed' => 'Embed Album', 'move' => 'Переместить альбом', + 'shop' => 'Shop Management', 'danger' => 'ОПАСНОЕ МЕСТО', ], 'hero' => [ diff --git a/lang/ru/maintenance.php b/lang/ru/maintenance.php index fae8cf688a1..993702fc8dd 100644 --- a/lang/ru/maintenance.php +++ b/lang/ru/maintenance.php @@ -73,4 +73,14 @@ 'description' => 'Очистить кэш каждого пользователя для решения проблем с устаревшими данными.', 'button' => 'Очистить', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/ru/webshop.php b/lang/ru/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/ru/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/sk/gallery.php b/lang/sk/gallery.php index 265a60bec6a..ce90ebf5416 100644 --- a/lang/sk/gallery.php +++ b/lang/sk/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/sk/maintenance.php b/lang/sk/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/sk/maintenance.php +++ b/lang/sk/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/sk/webshop.php b/lang/sk/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/sk/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/sv/gallery.php b/lang/sv/gallery.php index 566af1c3b41..1234ecb74e8 100644 --- a/lang/sv/gallery.php +++ b/lang/sv/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/sv/maintenance.php b/lang/sv/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/sv/maintenance.php +++ b/lang/sv/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/sv/webshop.php b/lang/sv/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/sv/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/vi/gallery.php b/lang/vi/gallery.php index 7079ceb70ff..16595df66d5 100644 --- a/lang/vi/gallery.php +++ b/lang/vi/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/vi/maintenance.php b/lang/vi/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/vi/maintenance.php +++ b/lang/vi/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/vi/webshop.php b/lang/vi/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/vi/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/zh_CN/gallery.php b/lang/zh_CN/gallery.php index e5b3a846b0e..1a96acc0990 100644 --- a/lang/zh_CN/gallery.php +++ b/lang/zh_CN/gallery.php @@ -77,6 +77,7 @@ 'share' => '分享相册', 'embed' => 'Embed Album', 'move' => '移动相册', + 'shop' => 'Shop Management', 'danger' => '危险操作', ], 'hero' => [ diff --git a/lang/zh_CN/maintenance.php b/lang/zh_CN/maintenance.php index 0d009117fde..194c95645de 100644 --- a/lang/zh_CN/maintenance.php +++ b/lang/zh_CN/maintenance.php @@ -74,4 +74,14 @@ 'description' => '清除所有用户的缓存以解决失效问题。', 'button' => '清除', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/zh_CN/webshop.php b/lang/zh_CN/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/zh_CN/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/lang/zh_TW/gallery.php b/lang/zh_TW/gallery.php index 85ebc1748d6..393b77609f4 100644 --- a/lang/zh_TW/gallery.php +++ b/lang/zh_TW/gallery.php @@ -77,6 +77,7 @@ 'share' => 'Share Album', 'embed' => 'Embed Album', 'move' => 'Move Album', + 'shop' => 'Shop Management', 'danger' => 'DANGER ZONE', ], 'hero' => [ diff --git a/lang/zh_TW/maintenance.php b/lang/zh_TW/maintenance.php index caa0d903f52..6158e808403 100644 --- a/lang/zh_TW/maintenance.php +++ b/lang/zh_TW/maintenance.php @@ -75,4 +75,14 @@ 'description' => 'Flush the cache of every user to solve invalidation problems.', 'button' => 'Flush', ], + 'old-orders' => [ + 'title' => 'Old Orders', + 'description' => 'Found %d old orders.

An old order is older than 14 days, that have no associated user and are either still pending payment or have no items in them.', + 'button' => 'Delete old orders', + ], + 'fulfill-orders' => [ + 'title' => 'Orders to fulfill', + 'description' => 'Found %d orders with content that has not been made available.

Click on the button to assign content when possible.', + 'button' => 'Fulfill orders', + ], ]; diff --git a/lang/zh_TW/webshop.php b/lang/zh_TW/webshop.php new file mode 100644 index 00000000000..e8c819515ff --- /dev/null +++ b/lang/zh_TW/webshop.php @@ -0,0 +1,218 @@ + [ + "cardHolder" => "Card Holder", + "fullName" => "Full Name", + "expires" => "Expires", + "MM" => "MM", + "YY" => "YY" + + ], + "cardForm" => [ + "cardNumber" => "Card Number", + "cardName" => "Card Name", + "expirationDate" => "Expiration Date", + "month" => "Month", + "year" => "Year", + "CVV" => "CVV", + "submit" => "Submit", + "invalidCardNumber" => "Invalid Card Number" + ], + "basketList" => [ + "basket" => "Basket", + "size" => "Size", + "license" => "License", + "notes" => "Notes", + "removeItem" => "Remove item", + "clearBasket" => "Clear basket", + "total" => "Total:", + "proceedToCheckout" => "Proceed to Checkout", + "emptyBasket" => "Your basket is empty." + ], + "checkout" => [ + "checkout" => "Checkout", + "yourInfo" => "Your info", + "payment" => "Payment", + "confirmation" => "Confirmation", + "next" => "Next", + "back" => "Back", + "thankYou" => "Thank you for your purchase!", + "orderNumber" => "Your order number is:", + "transactionId" => "Your transaction id is:", + "noteWarning" => "Please", + "noteTransactionId" => "note your transaction id and", + "noteOrderNumber" => "your order number", + "noteReason" => "as you will need them to access your content.", + "enjoyPurchase" => "Enjoy your purchase!", + "toMyDownloads" => "To my downloads", + "toTheGallery" => "To the gallery", + "offlineThankYou" => "Thank you for your purchase!", + "offlinePaymentMessage" => "We will get in touch with you shortly via email with the payment instructions.", + "offlineProcessingMessage" => "We will notify you once your photos are ready to be downloaded." + ], + "orderDownload" => [ + "order" => "Order %d", + "orderAccessRequired" => "Order Access Required", + "provideTransactionId" => "Please provide the transaction ID to access your order details.", + "enterTransactionId" => "Enter transaction ID", + "loadOrder" => "Load Order", + "orderDetails" => "Order Details", + "transactionId" => "Transaction ID:", + "orderSummary" => "Order Summary", + "for" => "For:", + "status" => "Status:", + "total" => "Total:", + "paid" => "Paid:", + "notPaid" => "not paid", + "lastUpdate" => "Last update:", + "items" => "Items", + "deliver" => "Deliver", + "edit" => "Edit", + "view" => "View", + "enterContentUrl" => "Enter content URL here.", + "download" => "Download", + "downloadNotAvailable" => "Download not available (yet)", + "copiedToClipboard" => "Copied to clipboard", + "orderLinkCopied" => "Order link copied to clipboard" + ], + "status" => [ + "pending" => "Pending", + "paid" => "Paid", + "offline" => "Offline", + "completed" => "Completed", + "processing" => "Processing", + "failed" => "Failed", + "closed" => "Closed" + ], + "orderList" => [ + "orders" => "Orders", + "numStaleOrders" => "Number of stale orders: %d", + "cleanStaleOrders" => "Clean stale orders", + "client" => "Client", + "transactionId" => "Transaction ID", + "status" => "Status", + "amount" => "Amount" + ], + "purchasablesList" => [ + "purchasables" => "Purchasables", + "title" => "Title", + "description" => "Description", + "notes" => "Notes", + "prices" => "Prices" + ], + "disclaimer" => [ + "title" => "Disclaimer", + "message" => "Lychee is developed under the MIT license. This means that LycheeOrg is not responsible nor liable for any issues or losses arising from the use of the webshop module and/or the payment processing capabilities. It is critical that you verify and ensure that your setup is working correctly and securely before using it in a production environment.", + "iUnderstand" => "I understand" + ], + "infoSection" => [ + "yourInfo" => "Your info", + "mustBeLoggedIn" => "You must be logged in to proceed with the checkout.", + "goToLogin" => "Go to login", + "notLoggedInMessage" => "You are not logged in! Please provide your email address to continue.", + "loggedInWithEmail" => "You are logged in as %s (%s). You can change your email address if you want to receive order-related communication at a different address.", + "loggedInWithoutEmail" => "You are logged in as %s. You set an email address if you want to receive order-related communication.", + "emailUsageNote" => "Your email will only be used for order-related communication.", + "consentAgreement" => "I agree to the privacy policy and terms of service." + ], + "errors" => [ + "emailRequired" => "Email is required for guest checkout.", + "invalidEmail" => "Please enter a valid email address.", + "noData" => "NO DATA" + ], + "orderLegend" => [ + "needHelp" => "Need help?", + "legend" => "Legend:", + "pendingDesc" => "Order is created but not paid yet.", + "processingDesc" => "Payment is being processed.", + "offlineDesc" => "Order is marked as to be paid manually.", + "completedDesc" => "Order has been paid.", + "closedDesc" => "Order has been delivered.", + "cancelledDesc" => "Payment has been cancelled.", + "failedDesc" => "Payment has failed.", + "flowsIntro" => "There are multiple possible order control flows as described bellow:", + "offlineExplanation" => "An order in the %s status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to %s once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "offlineStatus" => "offline", + "completedStatus" => "completed", + "closedStatus" => "closed", + "offlineExplanationPart1" => "An order in the", + "offlineExplanationPart2" => "status indicates that the payment will be handled manually, such as through bank transfer or cash on delivery. The admin of the webshop is responsible for updating the order status to", + "offlineExplanationPart3" => "once the payment is confirmed by clicking the \"Mark as Paid\" button in the order details.", + "closedExplanationPart1" => "Once an order reaches the", + "closedExplanationPart2" => "status, it is considered finalized and no further actions can be taken." + ], + "orderListAction" => [ + "markAsPaid" => "Mark as Paid", + "requireAttention" => "Require Attention", + "markAsDelivered" => "Mark as Delivered", + "viewDetails" => "View Details" + ], + "orderSummary" => [ + "title" => "Summary of your order", + "size" => "Size:", + "license" => "License:", + "notes" => "Notes:", + "total" => "Total:" + ], + "paymentForm" => [ + "selectProvider" => "Select your payment provider", + "selectProviderPlaceholder" => "Select a payment provider", + "pciCompliant" => "This payment is %s compliant.
Your card details are processed securely by %s.", + "enterInfo" => "Enter your info for %s" + ], + "paymentInProgress" => [ + "message" => "Payment in progess...", + "cancel" => "cancel" + ], + "useOrder" => [ + "copiedToClipboard" => "Copied to clipboard", + "transactionIdCopied" => "Transaction ID copied to clipboard" + ], + "albumPurchasable" => [ + "notPurchasableYet" => "This album is not purchasable (yet).", + "descriptionPlaceholder" => "Description for clients", + "ownerNotePlaceholder" => "Owner's Note", + "setPurchasable" => "Set Purchasable", + "setPurchasablePropagate" => "Set Purchasable and propagate", + "disable" => "Disable", + "update" => "Update", + "setAtLeastOnePrice" => "Set at least one price.", + "success" => "Success", + "error" => "Error", + "albumNowPurchasable" => "Album is now purchasable", + "albumNoLongerPurchasable" => "Album is no longer purchasable" + ], + "pricesInput" => [ + "licenseType" => "License Type", + "variant" => "Variant", + "duplicateError" => "There are duplicate prices (same license type and size variant).", + "addPrice" => "Add Price" + ], + "useStepTwo" => [ + "fakeCardClipboard" => "Fake card number available in clipboard", + "paymentSuccess" => "Payment processed successfully.", + "redirectError" => "Redirection requested but target is absent.", + "finalizationError" => "Finalization requested but target is absent.", + "orderFinalizedSuccess" => "Order finalized successfully.", + "orderFinalizationFailed" => "Order finalization failed.", + "badRequest" => "Bad Request", + "invalidInput" => "The request was invalid. Please check your input.", + "success" => "Success", + "error" => "Error" + ], + "useMollie" => [ + "error" => "Error", + "profileNotConfigured" => "Mollie profile ID is not configured." + ], + "buyMeActions" => [ + "success" => "Success", + "addedToOrder" => "Added to order", + "photoAddedToOrder" => "%s added to your order for %s" + ] +]; diff --git a/package-lock.json b/package-lock.json index c89aaaea23b..0b20bd5eefe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,8 +7,10 @@ "name": "lychee", "dependencies": { "@fortawesome/fontawesome-free": "^7.1.0", + "@mollie/api-client": "^4.3.3", "@primeuix/themes": "^1.2.5", "@sidsbrmnn/scrollspy": "^1.1.0", + "@stripe/stripe-js": "^8.0.0", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.17", "@types/dropbox-chooser": "^1.0.8", @@ -1115,6 +1117,20 @@ "dev": true, "license": "MIT" }, + "node_modules/@mollie/api-client": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@mollie/api-client/-/api-client-4.3.3.tgz", + "integrity": "sha512-vA8EM3nO8pcTX2AAG93FQElZ9uVpKJ7DBCEalvyStZEnGYGD3fIVPs6Pmr0lIB2tkjrqjEdbhfwwaK4MtBxs+w==", + "license": "BSD-3-Clause", + "dependencies": { + "@types/node-fetch": "^2.6.12", + "node-fetch": "^2.7.0", + "ruply": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1599,6 +1615,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@stripe/stripe-js": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@stripe/stripe-js/-/stripe-js-8.0.0.tgz", + "integrity": "sha512-dLvD55KT1cBmrqzgYRgY42qNcw6zW4HS5oRZs0xRvHw9gBWig5yDnWNop/E+/t2JK+OZO30zsnupVBN2MqW2mg==", + "license": "MIT", + "engines": { + "node": ">=12.16" + } + }, "node_modules/@tailwindcss/node": { "version": "4.1.17", "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.17.tgz", @@ -2259,6 +2284,16 @@ "undici-types": "~7.16.0" } }, + "node_modules/@types/node-fetch": { + "version": "2.6.13", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.13.tgz", + "integrity": "sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "form-data": "^4.0.4" + } + }, "node_modules/@types/qrcode": { "version": "1.5.6", "resolved": "https://registry.npmjs.org/@types/qrcode/-/qrcode-1.5.6.tgz", @@ -6208,6 +6243,48 @@ "license": "MIT", "optional": true }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-releases": { "version": "2.0.27", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", @@ -6929,6 +7006,12 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/ruply": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ruply/-/ruply-1.0.1.tgz", + "integrity": "sha512-p39LnaaJyuucPGlgaB0KiyifpcuOkn24+Hq5y0ejAD/LlH+mRAbkHn2tckCLgHir+S+nis1WYG+TYEC4zHX0WQ==", + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", diff --git a/package.json b/package.json index 6e9f8b9eac8..76572aa0c47 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,10 @@ }, "dependencies": { "@fortawesome/fontawesome-free": "^7.1.0", + "@mollie/api-client": "^4.3.3", "@primeuix/themes": "^1.2.5", "@sidsbrmnn/scrollspy": "^1.1.0", + "@stripe/stripe-js": "^8.0.0", "@tailwindcss/typography": "^0.5.19", "@tailwindcss/vite": "^4.1.17", "@types/dropbox-chooser": "^1.0.8", diff --git a/resources/js/components/drawers/AlbumEdit.vue b/resources/js/components/drawers/AlbumEdit.vue index 231b554dac1..00faeb674a6 100644 --- a/resources/js/components/drawers/AlbumEdit.vue +++ b/resources/js/components/drawers/AlbumEdit.vue @@ -42,6 +42,19 @@ > {{ $t("gallery.album.tabs.move") }} +
  • + {{ $t("gallery.album.tabs.shop") }} +
  • +
    + +
    albumStore.rights?.can_share_with_users && numUs const canMove = computed(() => albumStore.config?.is_model_album && albumStore.rights?.can_move); const canTransfer = computed(() => albumStore.config?.is_base_album && numUsers.value > 1 && albumStore.rights?.can_transfer); const canDelete = computed(() => albumStore.config?.is_base_album && albumStore.rights?.can_delete); +const canManagePurchase = computed(() => albumStore.config?.is_model_album && albumStore.rights?.can_make_purchasable); function close() { activeTab.value = 0; diff --git a/resources/js/components/drawers/PhotoDetails.vue b/resources/js/components/drawers/PhotoDetails.vue index b7a81c84ae1..fe6397e36c8 100644 --- a/resources/js/components/drawers/PhotoDetails.vue +++ b/resources/js/components/drawers/PhotoDetails.vue @@ -7,7 +7,7 @@ 'w-0 ltr:translate-x-full rtl:-translate-x-full': !areDetailsOpen, }" > - +