Add i18n support and cart total to Shopify integration

Implement multilingual support for shop interface and add total calculation to cart drawer:
- Add FR/EN translations for all shop-related texts (cart, checkout, stock status)
- Update templates and JavaScript to use translation system
- Add cart total calculation with formatted currency display
- Refactor cart drawer styles to SASS with improved button styling (black borders on +/-)
- Fix English product content (replace JSON with proper HTML)
- Extract cart drawer to separate snippet for better organization

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
isUnknown 2026-01-14 12:02:55 +01:00
parent 28501fec7c
commit b3940bba08
12 changed files with 586 additions and 451 deletions

View file

@ -21,6 +21,16 @@
const variantId = addToCartBtn.dataset.variantId;
const stockDisplay = document.querySelector('[data-product-stock]');
// Get translated texts
const texts = {
add: addToCartBtn.dataset.textAdd || 'Add to cart',
adding: addToCartBtn.dataset.textAdding || 'Adding...',
added: addToCartBtn.dataset.textAdded || 'Added! ✓',
error: addToCartBtn.dataset.textError || 'Error - Try again',
outOfStock: addToCartBtn.dataset.textOutOfStock || 'Out of stock',
inStock: addToCartBtn.dataset.textInStock || 'In stock'
};
// Load product data to check availability
async function loadProductData() {
try {
@ -49,16 +59,16 @@
// Update button based on availability
if (!variant.availableForSale) {
addToCartBtn.disabled = true;
addToCartBtn.textContent = 'Rupture de stock';
addToCartBtn.textContent = texts.outOfStock;
addToCartBtn.classList.add('out-of-stock');
if (stockDisplay) {
stockDisplay.textContent = 'Rupture de stock';
stockDisplay.textContent = texts.outOfStock;
stockDisplay.classList.add('out-of-stock');
}
} else {
// Show in stock
if (stockDisplay) {
stockDisplay.textContent = 'En stock';
stockDisplay.textContent = texts.inStock;
stockDisplay.classList.add('in-stock');
}
}
@ -78,14 +88,14 @@
// Disable button during request
addToCartBtn.disabled = true;
const originalText = addToCartBtn.textContent;
addToCartBtn.textContent = 'Ajout en cours...';
addToCartBtn.textContent = texts.adding;
try {
const variantId = this.dataset.variantId;
const cartResult = await cart.addToCart(variantId, 1);
// Show success feedback
addToCartBtn.textContent = 'Ajouté ! ✓';
addToCartBtn.textContent = texts.added;
addToCartBtn.classList.add('success');
// Dispatch event to open cart drawer
@ -104,7 +114,7 @@
console.error('Error adding to cart:', error);
// Show error feedback
addToCartBtn.textContent = 'Erreur - Réessayer';
addToCartBtn.textContent = texts.error;
addToCartBtn.classList.add('error');
// Re-enable button after delay