-
Customers words
-
- What do they say about us?
-
+ return (
+
+
+
{t.testimonialsTitle}
+
{t.testimonialsSubtitle}
+
+
+ {testemonialsData.map((item, index) => (
+
+
+
+
+
+
+
+
{item.name}
+
-
- {testemonialsData.map((item, index) => (
-
-
-
-
-
-
-
-
{item.name}
-
-
-
-
- {item.description}
-
-
-
- ))}
+
-
- );
-}
+
+ ))}
+
+
+ );
+};
diff --git a/examples/ecommerce-jewellery-store/src/data/languageItems.ts b/examples/ecommerce-jewellery-store/src/data/languageItems.ts
new file mode 100644
index 00000000..9edcfc53
--- /dev/null
+++ b/examples/ecommerce-jewellery-store/src/data/languageItems.ts
@@ -0,0 +1,13 @@
+const languageItems = [
+ {
+ text: "Language",
+ items: [
+ { text: "English" },
+ { text: "French" },
+ { text: "Spanish" },
+ ],
+ },
+ ];
+
+ export default languageItems;
+
\ No newline at end of file
diff --git a/examples/ecommerce-jewellery-store/src/data/listData.ts b/examples/ecommerce-jewellery-store/src/data/listData.ts
index f1d974f6..aef83130 100644
--- a/examples/ecommerce-jewellery-store/src/data/listData.ts
+++ b/examples/ecommerce-jewellery-store/src/data/listData.ts
@@ -19,166 +19,195 @@ import diamondRingRuby from "../assets/listViewImages/diamondRingRuby.png";
import stainlessSteelWatch from "../assets/listViewImages/stainlessSteelWatch.png";
import goldEarringsGarnet from "../assets/listViewImages/goldEarringsGarnet.png";
import { ListDataDescriptor } from "./types";
+import { useLanguageContext } from "../helpers/LanguageContext";
-export const listData: ListDataDescriptor[] = [{
- img: diamongWeddingRing,
- status: "sale",
- title: "Diamond Wedding Ring",
- category: "Rings",
- material: "Silver",
- oldPrice: 990,
- newPrice: 890
-}, {
- img: silverBraceletCross,
- status: "recommended",
- category: "Bracelets",
- material: "Silver",
- title: "Silver Bracelet with Cross",
- oldPrice: null,
- newPrice: 270
-},
-{
- img: pinkSilverBracelet,
- status: null,
- category: "Bracelets",
- material: "Silver",
- title: "Pink Silver Bracelet",
- oldPrice: null,
- newPrice: 460
-}, {
- img: yellowGoldEarrings,
- status: "sale",
- category: "Earrings",
- material: "Silver",
- title: "Yellow Gold Earrings",
- oldPrice: 500,
- newPrice: 380
-}, {
- img: silverHeartNecklace,
- status: null,
- category: "Necklaces",
- material: "Silver",
- title: "Silver Heart Necklace",
- oldPrice: null,
- newPrice: 400
-}, {
- img: homemadeSilverEarrings,
- status: null,
- category: "Earrings",
- material: "Silver",
- title: "Handmade Silver Earrings",
- oldPrice: null,
- newPrice: 650
-}, {
- img: diamondWeddingBands,
- status: "recommended",
- title: "Diamond Wedding Bands",
- material: "Gold",
- category: "Rings",
- oldPrice: null,
- newPrice: 4290
-}, {
- img: casualSilverWatch,
- status: null,
- title: "Casual Silver Watch",
- category: "Watches",
- material: "Silver",
- oldPrice: null,
- newPrice: 390
-}, {
- img: silverBraceletOnyx,
- status: "sale",
- title: "Silver Bracelet with Onyx",
- material: "Silver",
- category: "Bracelets",
- oldPrice: 950,
- newPrice: 770
-}, {
- img: weddingBandsPearl,
- status: "must have",
- title: "Wedding Bands with Pearls",
- material: "Gold",
- category: "Rings",
- oldPrice: null,
- newPrice: 900
-}, {
- img: silverWeddingBands,
- status: null,
- title: "Silver Wedding Bands",
- material: "Silver",
- category: "Rings",
- oldPrice: null,
- newPrice: 250
-}, {
- img: handmadeYellowGoldRing,
- status: null,
- category: "Rings",
- material: "Silver",
- title: "Handmade Yellow Gold Ring",
- oldPrice: null,
- newPrice: 560
-}, {
- img: diamondRingSapphire,
- status: "must have",
- title: "Diamond Ring with Sapphire",
- category: "Rings",
- material: "Gold",
- oldPrice: null,
- newPrice: 3590
-}, {
- img: silverHeartBracelet,
- status: null,
- title: "Silver Heart Bracelet",
- category: "Bracelets",
- material: "Silver",
- oldPrice: null,
- newPrice: 430
-}, {
- img: roseGoldEarringsOpal,
- status: "Sale",
- title: "Rose Gold Earrings with Opal",
- category: "Earrings",
- material: "Gold",
- oldPrice: 850,
- newPrice: 690
-},{
- img: silverBraceletTopaz,
- status: null,
- category: "Bracelets",
- material: "Silver",
- title: "Silver Bracelet with Topaz",
- oldPrice: null,
- newPrice: 580
-},{
- img: handmadeDiamongRing,
- status: null,
- category: "Rings",
- material: "Gold",
- title: "Handmade Diamond Ring",
- oldPrice: null,
- newPrice: 1100
-},{
- img: diamondRingRuby,
- status: "must have",
- category: "Rings",
- material: "Gold",
- title: "Diamong Ring with Ruby",
- oldPrice: null,
- newPrice: 5560
-},{
- img: stainlessSteelWatch,
- status: null,
- material: "Silver",
- category: "Watches",
- title: "Silver Watch",
- oldPrice: null,
- newPrice: 270
-}, {
- img: goldEarringsGarnet,
- status: null,
- category: "Earrings",
- material: "Gold",
- title: "Gold Earrings with Garnet",
- oldPrice: null,
- newPrice: 270
-},].map((item, index) => ({ ...item, id: index + 1, rating: Math.floor(Math.random() * 5) + 3 }));
\ No newline at end of file
+export const useTranslatedListData = (): ListDataDescriptor[] => {
+ const { t } = useLanguageContext();
+
+ return [
+ {
+ img: diamongWeddingRing,
+ status: t.statuses.statusSale,
+ title: t.diamondWeddingRing,
+ category: t.categories.Rings,
+ material: t.materials.materialSilver,
+ oldPrice: 990,
+ newPrice: 890,
+ },
+ {
+ img: silverBraceletCross,
+ status: t.statuses.statusRecommended,
+ title: t.silverBraceletWithCross,
+ category: t.categories.Bracelets,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 270,
+ },
+ {
+ img: pinkSilverBracelet,
+ status: null,
+ title: t.pinkSilverBracelet,
+ category: t.categories.Bracelets,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 460,
+ },
+ {
+ img: yellowGoldEarrings,
+ status: t.statuses.statusSale,
+ title: t.yellowGoldEarrings,
+ category: t.categories.Earrings,
+ material: t.materials.materialSilver,
+ oldPrice: 500,
+ newPrice: 380,
+ },
+ {
+ img: silverHeartNecklace,
+ status: null,
+ title: t.silverHeartNecklace,
+ category: t.categories.Necklaces,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 400,
+ },
+ {
+ img: homemadeSilverEarrings,
+ status: null,
+ title: t.handmadeSilverEarrings,
+ category: t.categories.Earrings,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 650,
+ },
+ {
+ img: diamondWeddingBands,
+ status: t.statuses.statusRecommended,
+ title: t.diamondWeddingBands,
+ category: t.categories.Rings,
+ material: t.materials.materialGold,
+ oldPrice: null,
+ newPrice: 4290,
+ },
+ {
+ img: casualSilverWatch,
+ status: null,
+ title: t.casualSilverWatch,
+ category: t.categories.Watches,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 390,
+ },
+ {
+ img: silverBraceletOnyx,
+ status: t.statuses.statusSale,
+ title: t.silverBraceletWithOnyx,
+ category: t.categories.Bracelets,
+ material: t.materials.materialSilver,
+ oldPrice: 950,
+ newPrice: 770,
+ },
+ {
+ img: weddingBandsPearl,
+ status: t.statuses.statusMustHave,
+ title: t.weddingBandsWithPearls,
+ category: t.categories.Rings,
+ material: t.materials.materialGold,
+ oldPrice: null,
+ newPrice: 900,
+ },
+ {
+ img: silverWeddingBands,
+ status: null,
+ title: t.silverWeddingBands,
+ category: t.categories.Rings,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 250,
+ },
+ {
+ img: handmadeYellowGoldRing,
+ status: null,
+ title: t.handmadeYellowGoldRing,
+ category: t.categories.Rings,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 560,
+ },
+ {
+ img: diamondRingSapphire,
+ status: t.statuses.statusMustHave,
+ title: t.diamondRingWithSapphire,
+ category: t.categories.Rings,
+ material: t.materials.materialGold,
+ oldPrice: null,
+ newPrice: 3590,
+ },
+ {
+ img: silverHeartBracelet,
+ status: null,
+ title: t.silverHeartBracelet,
+ category: t.categories.Bracelets,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 430,
+ },
+ {
+ img: roseGoldEarringsOpal,
+ status: t.statuses.statusSale,
+ title: t.roseGoldEarringsWithOpal,
+ category: t.categories.Earrings,
+ material: t.materials.materialGold,
+ oldPrice: 850,
+ newPrice: 690,
+ },
+ {
+ img: silverBraceletTopaz,
+ status: null,
+ title: t.silverBraceletWithTopaz,
+ category: t.categories.Bracelets,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 580,
+ },
+ {
+ img: handmadeDiamongRing,
+ status: null,
+ title: t.handmadeDiamondRing,
+ category: t.categories.Rings,
+ material: t.materials.materialGold,
+ oldPrice: null,
+ newPrice: 1100,
+ },
+ {
+ img: diamondRingRuby,
+ status: t.statuses.statusMustHave,
+ title: t.diamondRingWithRuby,
+ category: t.categories.Rings,
+ material: t.materials.materialGold,
+ oldPrice: null,
+ newPrice: 5560,
+ },
+ {
+ img: stainlessSteelWatch,
+ status: null,
+ title: t.silverWatch,
+ category: t.categories.Watches,
+ material: t.materials.materialSilver,
+ oldPrice: null,
+ newPrice: 270,
+ },
+ {
+ img: goldEarringsGarnet,
+ status: null,
+ title: t.goldEarringsWithGarnet,
+ category: t.categories.Earrings,
+ material: t.materials.materialGold,
+ oldPrice: null,
+ newPrice: 270,
+ },
+ ].map((item, index) => ({
+ ...item,
+ id: index + 1,
+ rating: Math.floor(Math.random() * 5) + 3,
+ }));
+};
diff --git a/examples/ecommerce-jewellery-store/src/data/messages/en.ts b/examples/ecommerce-jewellery-store/src/data/messages/en.ts
new file mode 100644
index 00000000..6acd61d9
--- /dev/null
+++ b/examples/ecommerce-jewellery-store/src/data/messages/en.ts
@@ -0,0 +1,494 @@
+export const en = {
+ title: "Vilora Jewelry",
+ subtitle: "We offer exquisite jewelry, each showcasing timeless elegance",
+ buttonText: "See Collections",
+ searchPlaceholder: "Search",
+ addToCartButtonText: "Add to Cart",
+ adminLabel: "Admin",
+ clientLabel: "Client",
+ "aureliaContent": "Rings are versatile jewelry pieces that symbolize personal style, suitable for both special occasions and everyday wear.",
+ languageMenuTitle: "Language",
+ "aureliaSubtitle": "Unique handmade rings",
+ languageEnglish: "English",
+ languageFrench: "French",
+ languageSpanish: "Spanish",
+ cookiesText: "We use cookies to improve your experience.",
+ rightsReservedText: "All rights reserved.",
+ subscribeText: "Subscribe to our Newsletter:",
+ emailPlaceholder: "Email",
+ subscribeButtonText: "Subscribe",
+ filterLabel: "Filter:",
+ sortByLabel: "Sort by:",
+ clearFiltersButton: "Clear Filters",
+ categoryPlaceholder: "Category",
+ materialPlaceholder: "Material",
+ categoriesData: ["Bracelets", "Rings", "Earrings", "Watches", "Necklaces"],
+ statusesData: ["Sale", "Recommended", "Must Have"],
+ materialsData: ["Gold", "Silver"],
+ followUsText: "Follow us:",
+ shoppingCartTitle: "Shopping Cart",
+ backButtonText: "Back",
+ whyChooseUs: "Why people choose us?",
+ returnPolicyTitle: "Return Policy",
+ returnPolicyContent: "You can return your items within 30 days for a full refund or exchange.",
+ includedGiftWrappingTitle: "Included Gift Wrapping",
+ includedGiftWrappingContent: "Add gift wrapping for a special touch, along with a personalized message for your loved ones.",
+ discountCodeTitle: "Discount Code Available",
+ discountCodeContent: "Apply your discount code at checkout to enjoy exclusive savings on your order.",
+ removeButtonText: "Remove",
+ emptyCartMessage: "Your shopping cart is empty.",
+ proceedToCheckoutButtonText: "Proceed to Checkout",
+ customerCareTitle: "Customer Care",
+ customerCareLinks: [
+ "Contact Us",
+ "Shopping Online",
+ "Track Your Order",
+ "Shipping & Delivery",
+ "Orders & Payment",
+ "Help",
+ ],
+ ourCompanyTitle: "Our Company",
+ ourCompanyLinks: [
+ "Prominent Locations",
+ "Careers",
+ "Corporate Responsibility",
+ "Sustainability",
+ "Society Care",
+ ],
+ legalPrivacyTitle: "Legal & Privacy",
+ legalPrivacyLinks: [
+ "Terms of Use",
+ "Conditions of Sale",
+ "Return Policy",
+ "Privacy Policy",
+ "Cookie Policy",
+ ],
+ // Menu Translations
+ menuHome: "Home",
+ menuJewelry: "Jewelry",
+ menuContacts: "Contacts",
+ menuBracelets: "Bracelets",
+ menuRings: "Rings",
+ menuEarrings: "Earrings",
+ menuWatches: "Watches",
+ menuAll: "All",
+ // Other Translations
+ bestsellersTitle: "Our Bestsellers",
+ bestsellersSubtitle: "Enjoy an excellent selection of fine jewelry",
+ buyNowButtonText: "Buy Now",
+ timelessTitle: "Timeless Classics",
+ timelessSubtitle: "Get our unique handmade collections",
+ timelessContent:
+ "Jewelry enhances style and adds elegance, with each piece telling a unique story.",
+ fineJewelryTitle: "Fine Jewelry",
+ fineJewelrySubtitle: "Get our unique handmade collections",
+ fineJewelryContent:
+ "Jewelry elevates one's style and brings sophistication, with every piece narrating a distinct tale.",
+ ringsTitle: "Our Rings",
+ ringsSubtitle: "Enjoy an excellent selection of fine rings",
+ watchesTitle: "Our Watches",
+ watchesSubtitle: "Enjoy an excellent selection of watches",
+ watchesContent:
+ "High-end gold watches for men are the epitome of luxury, combining precision with sophisticated craftsmanship.",
+ servicesTitle: "Services",
+ servicesSubtitle: "Explore expert repairs to elevate your experience",
+ servicesContent:
+ "Vilora provides services like custom designs, repairs, and appraisals to enhance the customer experience.",
+ testimonialsTitle: "Customer Words",
+ testimonialsSubtitle: "What do they say about us?",
+ testimonialsData: [
+ {
+ image: "/testemonials1.jpg",
+ name: "Erica Moore",
+ rating: 5,
+ description:
+ "Vilora exceeded all my expectations! The craftsmanship of my diamond necklace is absolutely stunning, and the attention to detail is unparalleled. From the moment I placed my order to the day it arrived, the entire experience was flawless.",
+ },
+ {
+ image: "/testemonials2.jpg",
+ name: "Kelvin Hettinger",
+ rating: 4.5,
+ description:
+ "I couldn't be happier with my custom engagement ring from Vilora. The team helped me design the perfect piece, and the final result was even more beautiful than I imagined. Their service, quality, and dedication to excellence make Vilora my go-to for all fine jewelry.",
+ },
+ {
+ image: "/testemonials3.jpg",
+ name: "Karen Brooks",
+ rating: 5,
+ description:
+ "Vilora’s collection is nothing short of breathtaking. I recently purchased a white sapphire ring, and it’s become my favorite piece. The elegance and brilliance of the jewelry reflect their impeccable taste and high standards. Highly recommend!",
+ },
+ ],
+ // Contacts Page Translations
+ getInTouchTitle: "Get in touch",
+ getInTouchSubtitle: "If you have any questions, contact us",
+ fullNameLabel: "Full Name",
+ fullNamePlaceholder: "Enter your full name",
+ emailLabel: "Email",
+ phoneNumberLabel: "Phone Number",
+ typeOfCustomerLabel: "Type of customer",
+ dateLabel: "Date",
+ bookSlotButton: "Book a Slot",
+ contactsImageAlt: "Contacts",
+ thankYou: {
+ title: "Thank You!",
+ subtitle: "Your order has been placed successfully.",
+ thankYouMessage: "Thank You For Your Order!",
+ orderSubmittedMessage: "You have submitted your order.",
+ backToShopping: "Back to Shopping",
+ },
+ thankYouTitle: "Thank You For Your Order!",
+ thankYouSubtitle: "You have submitted your order",
+ backToShoppingButton: "Back to Shopping",
+ allProductsTitle: "Fine Selection",
+ allProductsSubtitle: "Enjoy the real craftsmanship",
+ allProductsContentText:
+ "Jewelry is a meaningful form of self-expression that enhances personal style and adds beauty to any occasion.",
+ collectionSerene: 'Collection "SERENE"',
+ collectionAurelia: 'Collection "AURELIA"',
+ chartSelectedDataButton: "Chart of Selected Data",
+ top3SalesButton: "Top 3 Sales per Category",
+ collectionRavina: 'Collection "RAVINA"',
+ ourCollectionsTitle: "Our Collections",
+ ourCollectionsSubtitle: "Enjoy an excellent selection of fine jewelry",
+ breadcrumbHome: "Home",
+ breadcrumbJewelry: "Jewelry",
+ buyButtonText: "Buy",
+ handmadePinkDiamondRing: "Handmade Pink Diamond Ring",
+ diamondRingWithPinkRuby: "Diamond Ring with Pink Ruby",
+ whiteSandDiamondRing: "White Sand Diamond Ring",
+ productSubtitle: "In Platinum with Natural Diamond",
+ productDescription: "Elegant wedding bands featuring lustrous pearls.",
+ reviewsText: "{0} reviews",
+ youMayAlsoLikeTitle: "You May Also Like",
+ youMayAlsoLikeSubtitle: "Enjoy an excellent selection of fine jewelry",
+ categories: {
+ Bracelets: "Bracelets",
+ Rings: "Rings",
+ Earrings: "Earrings",
+ Watches: "Watches",
+ Necklaces: "Necklaces",
+ },
+ diamondWeddingRing: "Diamond Wedding Ring",
+ silverBraceletWithCross: "Silver Bracelet with Cross",
+ pinkSilverBracelet: "Pink Silver Bracelet",
+ yellowGoldEarrings: "Yellow Gold Earrings",
+ silverHeartNecklace: "Silver Heart Necklace",
+ handmadeSilverEarrings: "Handmade Silver Earrings",
+ diamondWeddingBands: "Diamond Wedding Bands",
+ casualSilverWatch: "Casual Silver Watch",
+ silverBraceletWithOnyx: "Silver Bracelet with Onyx",
+ weddingBandsWithPearls: "Wedding Bands with Pearls",
+ silverWeddingBands: "Silver Wedding Bands",
+ handmadeYellowGoldRing: "Handmade Yellow Gold Ring",
+ diamondRingWithSapphire: "Diamond Ring with Sapphire",
+ silverHeartBracelet: "Silver Heart Bracelet",
+ roseGoldEarringsWithOpal: "Rose Gold Earrings with Opal",
+ silverBraceletWithTopaz: "Silver Bracelet with Topaz",
+ handmadeDiamondRing: "Handmade Diamond Ring",
+ diamondRingWithRuby: "Diamond Ring with Ruby",
+ silverWatch: "Silver Watch",
+ goldEarringsWithGarnet: "Gold Earrings with Garnet",
+ statuses: {
+ statusSale: "Sale",
+ statusRecommended: "Recommended",
+ statusMustHave: "Must Have",
+ },
+ materials: {
+ materialGold: "Gold",
+ materialSilver: "Silver",
+ },
+ paymentDetailsTitle: "Payment Details",
+ paymentDetailsSubtitle: "Please, submit your payment details",
+ paymentMethodCreditCard: "Credit Card",
+ paymentMethodBankTransfer: "Bank Transfer",
+ paymentMethodApplePay: "Apple Pay",
+ cardNumberLabel: "Card Number",
+ expiryDateLabel: "Expiry Date",
+ cvvLabel: "CVV*",
+ cardHolderLabel: "Cardholder",
+ submitOrderButton: "Submit Order",
+ subTotalLabel: "Sub total",
+ usDollarsLabel: "US Dollars",
+ vatLabel: "VAT",
+ shippingMethodLabel: "Shipping Method",
+ standardFreeDeliveryLabel: "Standard Free Delivery",
+ giftWrappingLabel: "Gift Wrapping",
+ includedGiftWrappingLabel: "Included Gift Wrapping",
+ totalLabel: "Total",
+ grid: {
+ groupPanelEmpty: "Drag a column header and drop it here to group by that column",
+ noRecords: "No records available.",
+ pagerFirstPage: "Go to the first page",
+ pagerPreviousPage: "Go to the previous page",
+ productTitle: "Product",
+ nameTitle: "Name",
+ skuTitle: "SKU",
+ categoryTitle: "Category",
+ priceTitle: "Price",
+ quantityTitle: "Quantity",
+ totalSalesTitle: "Total Sales",
+ pagerNextPage: "Go to the next page",
+ pagerLastPage: "Go to the last page",
+ pagerPage: "Page",
+ pagerOf: "of",
+ pagerTotalPages: "{0}",
+ pagerItems: "items",
+ pagerInfo: "{0} - {1} of {2} items",
+ pagerItemsPerPage: "items per page",
+ filterEqOperator: "Is equal to",
+ filterNotEqOperator: "Is not equal to",
+ filterIsNullOperator: "Is null",
+ filterIsNotNullOperator: "Is not null",
+ filterIsEmptyOperator: "Is empty",
+ filterIsNotEmptyOperator: "Is not empty",
+ filterStartsWithOperator: "Starts with",
+ filterContainsOperator: "Contains",
+ filterNotContainsOperator: "Does not contain",
+ filterEndsWithOperator: "Ends with",
+ filterGteOperator: "Is greater than or equal to",
+ filterGtOperator: "Is greater than",
+ filterLteOperator: "Is less than or equal to",
+ filterLtOperator: "Is less than",
+ filterIsTrue: "Yes",
+ filterIsFalse: "No",
+ filterBooleanAll: "(All)",
+ filterAfterOrEqualOperator: "Is after or equal to",
+ filterAfterOperator: "Is after",
+ filterBeforeOperator: "Is before",
+ filterBeforeOrEqualOperator: "Is before or equal to",
+ filterSubmitButton: "Filter",
+ filterClearButton: "Clear filters",
+ filterAndLogic: "And",
+ filterOrLogic: "Or",
+ filterTitle: "Filter",
+ sortAscending: "Sort ascending",
+ sortDescending: "Sort descending",
+ searchPlaceholder: "Search",
+ filterCheckAll: "Check all",
+ pagerItemPerPage: "Items per page",
+ filterChooseOperator: "Choose operator",
+ filterSelectedItems: "selected items",
+ filterAriaLabel: "Filter",
+ sortAriaLabel: "Sortable",
+ groupColumn: "Group column",
+ groupExpand: "Expand group",
+ groupCollapse: "Collapse group",
+ groupPanelAriaLabel: "group panel",
+ ungroupColumn: "Ungroup column",
+ detailExpand: "Expand detail row",
+ detailCollapse: "Collapse detail row",
+ wizard: {
+ windowTitle: "Chart Preview",
+ exportButton: "Export",
+ exportPDF: "PDF File",
+ exportSVG: "SVG File",
+ exportPNG: "PNG File",
+ tabChart: "Chart",
+ tabData: "Data",
+ tabFormat: "Format",
+ barChart: "Bar Chart",
+ bar: "Bar",
+ stackedBar: "Stacked Bar",
+ "100stackedBar": "100% Stacked Bar",
+ pieChart: "Pie Chart",
+ pie: "Pie",
+ columnChart: "Column Chart",
+ column: "Column",
+ stackedColumn: "Stacked Column",
+ "100stackedColumn": "100% Stacked Column",
+ lineChart: "Line Chart",
+ line: "Line",
+ stackedLine: "Stacked Line",
+ "100stackedLine": "100% Stacked Line",
+ scatterChart: "Scatter Chart",
+ scatter: "Scatter",
+ configuration: "Configuration",
+ categoryAxis: "Category Axis",
+ xAxis: "X Axis",
+ valueAxis: "Value Axis",
+ series: "Series",
+ add: "Add",
+ chartArea: "Chart Area",
+ margins: "Margins",
+ auto: "Auto",
+ left: "Left",
+ right: "Right",
+ top: "Top",
+ bottom: "Bottom",
+ background: "Background Color",
+ title: "Title",
+ applyTo: "Apply to",
+ chartTitle: "Chart Title",
+ chartSubtitle: "Chart Subtitle",
+ font: "Font",
+ size: "Size",
+ color: "Color",
+ legend: "Legend",
+ showLegend: "Show Legend",
+ position: "Position",
+ labels: "Labels",
+ rotation: "Rotation",
+ reverseOrder: "Reverse Order",
+ valueAxisTitle: "Value Axis Title",
+ categoryAxisTitle: "Category Axis Title",
+ },
+ chartWizard: {
+ window: {
+ title: "Chart Preview",
+ },
+ export: {
+ button: "Export",
+ PDF: "PDF File",
+ SVG: "SVG File",
+ PNG: "PNG File",
+ },
+ tab: {
+ chart: "Chart",
+ data: "Data",
+ format: "Format",
+ },
+ chart: {
+ barChart: {
+ expandText: "Bar Chart",
+ bar: "Bar",
+ stackedBar: "Stacked Bar",
+ "100%stackedBar": "100% Stacked Bar",
+ },
+ pieChart: {
+ expandText: "Pie Chart",
+ pie: "Pie",
+ },
+ columnChart: {
+ expandText: "Column Chart",
+ column: "Column",
+ stackedColumn: "Stacked Column",
+ "100%stackedColumn": "100% Stacked Column",
+ },
+ lineChart: {
+ expandText: "Line Chart",
+ line: "Line",
+ stackedLine: "Stacked Line",
+ "100%stackedLine": "100% Stacked Line",
+ },
+ scatterChart: {
+ expandText: "Scatter Chart",
+ scatter: "Scatter",
+ },
+ },
+ data: {
+ configuration: {
+ expandText: "Configuration",
+ categoryAxis: "Category Axis",
+ xAxis: "X Axis",
+ valueAxis: "Value Axis",
+ series: {
+ title: "Series",
+ add: "Add",
+ },
+ },
+ },
+ format: {
+ chartArea: {
+ expandText: "Chart Area",
+ margins: {
+ auto: "Auto",
+ left: "Left",
+ right: "Right",
+ top: "Top",
+ bottom: "Bottom",
+ },
+ background: {
+ color: "Color",
+ },
+ },
+ title: {
+ expandText: "Title",
+ applyTo: "Apply to",
+ chartTitle: "Chart Title",
+ chartSubtitle: "Chart Subtitle",
+ label: "Title",
+ font: "Font",
+ fontPlaceholder: "(inherited font)",
+ size: "Size",
+ sizePlaceholder: "px",
+ color: "Color",
+ },
+ series: {
+ expandText: "Series",
+ applyTo: "Apply to",
+ allSeries: "All Series",
+ color: "Color",
+ showLabels: "Show Labels",
+ },
+ legend: {
+ expandText: "Legend",
+ showLegend: "Show Legend",
+ font: "Font",
+ fontPlaceholder: "(inherited font)",
+ size: "Size",
+ sizePlaceholder: "px",
+ color: "Color",
+ position: {
+ top: "Top",
+ bottom: "Bottom",
+ left: "Left",
+ right: "Right",
+ },
+ },
+ categoryAxis: {
+ expandText: "Category Axis",
+ title: {
+ expandText: "Title",
+ placeholder: "Axis Title",
+ font: "Font",
+ fontPlaceholder: "(inherited font)",
+ size: "Size",
+ sizePlaceholder: "px",
+ color: "Color",
+ },
+ labels: {
+ text: "Labels",
+ font: "Font",
+ fontPlaceholder: "(inherited font)",
+ size: "Size",
+ sizePlaceholder: "px",
+ color: "Color",
+ rotation: {
+ text: "Rotation",
+ auto: "Auto",
+ },
+ reverseOrder: "Reverse Order",
+ },
+ },
+ valueAxis: {
+ expandText: "Value Axis",
+ title: {
+ text: "Title",
+ placeholder: "Axis Title",
+ font: "Font",
+ fontPlaceholder: "(inherited font)",
+ size: "Size",
+ sizePlaceholder: "px",
+ color: "Color",
+ },
+ labels: {
+ text: "Labels",
+ font: "Font",
+ fontPlaceholder: "(inherited font)",
+ size: "Size",
+ sizePlaceholder: "px",
+ color: "Color",
+ rotation: {
+ text: "Rotation",
+ auto: "Auto",
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+
+export default en
\ No newline at end of file
diff --git a/examples/ecommerce-jewellery-store/src/data/messages/es.ts b/examples/ecommerce-jewellery-store/src/data/messages/es.ts
new file mode 100644
index 00000000..8cc59697
--- /dev/null
+++ b/examples/ecommerce-jewellery-store/src/data/messages/es.ts
@@ -0,0 +1,493 @@
+export const es = {
+ // General Translations
+ title: "Joyería Vilora",
+ subtitle:
+ "Ofrecemos joyería exquisita, cada una mostrando elegancia atemporal",
+ buttonText: "Ver Colecciones",
+ searchPlaceholder: "Buscar",
+ addToCartButtonText: "Agregar al Carrito",
+ adminLabel: "Admin",
+ clientLabel: "Cliente",
+ languageMenuTitle: "Idioma",
+ languageEnglish: "Inglés",
+ languageFrench: "Francés",
+ languageSpanish: "Español",
+ cookiesText: "Usamos cookies para mejorar tu experiencia.",
+ rightsReservedText: "Todos los derechos reservados.",
+ subscribeText: "Suscríbete a nuestro boletín:",
+ emailPlaceholder: "Correo electrónico",
+ subscribeButtonText: "Suscribirse",
+ filterLabel: "Filtrar:",
+ sortByLabel: "Ordenar por:",
+ clearFiltersButton: "Borrar filtros",
+ categoryPlaceholder: "Categoría",
+ materialPlaceholder: "Material",
+ categoriesData: ["Pulseras", "Anillos", "Pendientes", "Relojes", "Collares"],
+ statusesData: ["Oferta", "Recomendado", "Imprescindible"],
+ materialsData: ["Oro", "Plata"],
+ whyChooseUs: "¿Por qué elegirnos?",
+ returnPolicyTitle: "Política de Devoluciones",
+ returnPolicyContent: "Puede devolver sus artículos dentro de los 30 días para obtener un reembolso completo o un cambio.",
+ includedGiftWrappingTitle: "Envoltorio de Regalo Incluido",
+ includedGiftWrappingContent: "Agregue un envoltorio de regalo para un toque especial, junto con un mensaje personalizado para sus seres queridos.",
+ discountCodeTitle: "Código de Descuento Disponible",
+ discountCodeContent: "Aplique su código de descuento al finalizar la compra para disfrutar de ahorros exclusivos en su pedido.",
+ followUsText: "Síguenos en:",
+ shoppingCartTitle: "Carrito de Compras",
+ backButtonText: "Volver",
+ removeButtonText: "Eliminar",
+ emptyCartMessage: "Tu carrito está vacío.",
+ proceedToCheckoutButtonText: "Proceder al Pago",
+ customerCareTitle: "Atención al Cliente",
+ customerCareLinks: [
+ "Contáctanos",
+ "Compras en Línea",
+ "Rastrea tu Pedido",
+ "Envío y Entrega",
+ "Pedidos y Pago",
+ "Ayuda",
+ ],
+ ourCompanyTitle: "Nuestra Empresa",
+ ourCompanyLinks: [
+ "Ubicaciones Destacadas",
+ "Carreras",
+ "Responsabilidad Corporativa",
+ "Sostenibilidad",
+ "Cuidado de la Sociedad",
+ ],
+ legalPrivacyTitle: "Legal y Privacidad",
+ legalPrivacyLinks: [
+ "Términos de Uso",
+ "Condiciones de Venta",
+ "Política de Devoluciones",
+ "Política de Privacidad",
+ "Política de Cookies",
+ ],
+ // Menu Translations
+ menuHome: "Inicio",
+ menuJewelry: "Joyería",
+ menuContacts: "Contactos",
+ menuBracelets: "Pulseras",
+ menuRings: "Anillos",
+ menuEarrings: "Pendientes",
+ menuWatches: "Relojes",
+ menuAll: "Todo",
+ // Other Translations
+ bestsellersTitle: "Nuestros Más Vendidos",
+ bestsellersSubtitle: "Disfruta de una excelente selección de joyas finas",
+ buyNowButtonText: "Comprar Ahora",
+ timelessTitle: "Clásicos Atemporales",
+ timelessSubtitle: "Obtén nuestras colecciones únicas hechas a mano",
+ timelessContent:
+ "Las joyas mejoran el estilo y agregan elegancia, cada pieza cuenta una historia única.",
+ fineJewelryTitle: "Joyería Fina",
+ fineJewelrySubtitle: "Obtén nuestras colecciones únicas hechas a mano",
+ fineJewelryContent:
+ "Las joyas elevan el estilo y aportan sofisticación, cada pieza narra una historia distinta.",
+ ringsTitle: "Nuestros Anillos",
+ ringsSubtitle: "Disfruta de una excelente selección de anillos finos",
+ watchesTitle: "Nuestros Relojes",
+ watchesSubtitle: "Disfruta de una excelente selección de relojes",
+ watchesContent:
+ "Los relojes de oro de alta gama para hombres son el epítome del lujo, combinando precisión con una artesanía sofisticada.",
+ servicesTitle: "Servicios",
+ servicesSubtitle: "Explora reparaciones expertas para mejorar tu experiencia",
+ servicesContent:
+ "Vilora ofrece servicios como diseños personalizados, reparaciones y tasaciones para mejorar la experiencia del cliente.",
+ testimonialsTitle: "Palabras de los Clientes",
+ testimonialsSubtitle: "¿Qué dicen de nosotros?",
+ testimonialsData: [
+ {
+ image: "/testemonials1.jpg",
+ name: "Erica Moore",
+ rating: 5,
+ description:
+ "¡Vilora superó todas mis expectativas! La artesanía de mi collar de diamantes es absolutamente impresionante, y la atención al detalle es inigualable. Desde el momento en que realicé mi pedido hasta el día que llegó, toda la experiencia fue impecable.",
+ },
+ {
+ image: "/testemonials2.jpg",
+ name: "Kelvin Hettinger",
+ rating: 4.5,
+ description:
+ "No podría estar más feliz con mi anillo de compromiso personalizado de Vilora. El equipo me ayudó a diseñar la pieza perfecta, y el resultado final fue aún más hermoso de lo que imaginé. Su servicio, calidad y dedicación a la excelencia hacen de Vilora mi opción para todas las joyas finas.",
+ },
+ {
+ image: "/testemonials3.jpg",
+ name: "Karen Brooks",
+ rating: 5,
+ description:
+ "La colección de Vilora es simplemente impresionante. Recientemente compré un anillo de zafiro blanco, y se ha convertido en mi pieza favorita. La elegancia y el brillo de las joyas reflejan su impecable gusto y altos estándares. ¡Altamente recomendado!",
+ },
+ ],
+ // Contacts Page Translations
+ getInTouchTitle: "Ponte en contacto",
+ getInTouchSubtitle: "Si tienes alguna pregunta, contáctanos",
+ fullNameLabel: "Nombre completo",
+ fullNamePlaceholder: "Ingresa tu nombre completo",
+ emailLabel: "Correo electrónico",
+ phoneNumberLabel: "Número de teléfono",
+ typeOfCustomerLabel: "Tipo de cliente",
+ dateLabel: "Fecha",
+ bookSlotButton: "Reservar una cita",
+ contactsImageAlt: "Contactos",
+ // Thank You Page Translations
+ thankYouTitle: "¡Gracias por su pedido!",
+ thankYouSubtitle: "Ha enviado su pedido",
+ backToShoppingButton: "Volver a comprar",
+ allProductsTitle: "Selección Fina",
+ allProductsSubtitle: "Disfruta de la verdadera artesanía",
+ allProductsContentText:
+ "La joyería es una forma significativa de autoexpresión que mejora el estilo personal y agrega belleza a cualquier ocasión.",
+ collectionSerene: 'Colección "SERENE"',
+ chartSelectedDataButton: "Gráfico de datos seleccionados",
+ top3SalesButton: "Top 3 de ventas por categoría",
+ collectionAurelia: 'Colección "AURELIA"',
+ collectionRavina: 'Colección "RAVINA"',
+ ourCollectionsTitle: "Nuestras Colecciones",
+ ourCollectionsSubtitle: "Disfruta de una excelente selección de joyería fina",
+ breadcrumbHome: "Inicio",
+ breadcrumbJewelry: "Joyería",
+ buyButtonText: "Comprar",
+ handmadePinkDiamondRing: "Anillo de diamante rosa hecho a mano",
+ diamondRingWithPinkRuby: "Anillo de diamante con rubí rosa",
+ whiteSandDiamondRing: "Anillo de diamante de arena blanca",
+ productSubtitle: "En platino con diamante natural",
+ productDescription: "Elegantes alianzas con perlas lustrosas.",
+ reviewsText: "{0} reseñas",
+ youMayAlsoLikeTitle: "También te puede interesar",
+ "aureliaSubtitle": "Anillos hechos a mano únicos",
+ "aureliaContent": "Los anillos son piezas de joyería versátiles que simbolizan el estilo personal, adecuados tanto para ocasiones especiales como para el uso diario.",
+ youMayAlsoLikeSubtitle: "Disfruta de una excelente selección de joyería fina",
+ thankYou: {
+ title: "¡Gracias!",
+ subtitle: "Su pedido ha sido realizado con éxito.",
+ thankYouMessage: "¡Gracias por su pedido!",
+ orderSubmittedMessage: "Ha enviado su pedido.",
+ backToShopping: "Volver a comprar",
+ },
+ categories: {
+ Bracelets: "Pulseras",
+ Rings: "Anillos",
+ Earrings: "Pendientes",
+ Watches: "Relojes",
+ Necklaces: "Collares",
+ },
+ diamondWeddingRing: "Anillo de boda de diamante",
+ silverBraceletWithCross: "Pulsera de plata con cruz",
+ pinkSilverBracelet: "Pulsera de plata rosa",
+ yellowGoldEarrings: "Pendientes de oro amarillo",
+ silverHeartNecklace: "Collar de corazón de plata",
+ handmadeSilverEarrings: "Pendientes de plata hechos a mano",
+ diamondWeddingBands: "Anillos de boda de diamante",
+ casualSilverWatch: "Reloj casual de plata",
+ silverBraceletWithOnyx: "Pulsera de plata con ónix",
+ weddingBandsWithPearls: "Anillos de boda con perlas",
+ silverWeddingBands: "Anillos de boda de plata",
+ handmadeYellowGoldRing: "Anillo de oro amarillo hecho a mano",
+ diamondRingWithSapphire: "Anillo de diamante con zafiro",
+ silverHeartBracelet: "Pulsera de corazón de plata",
+ roseGoldEarringsWithOpal: "Pendientes de oro rosa con ópalo",
+ silverBraceletWithTopaz: "Pulsera de plata con topacio",
+ handmadeDiamondRing: "Anillo de diamante hecho a mano",
+ diamondRingWithRuby: "Anillo de diamante con rubí",
+ silverWatch: "Reloj de plata",
+ goldEarringsWithGarnet: "Pendientes de oro con granate",
+ statuses: {
+ statusSale: "Oferta",
+ statusRecommended: "Recomendado",
+ statusMustHave: "Imprescindible",
+ },
+ materials: {
+ materialGold: "Oro",
+ materialSilver: "Plata",
+ },
+ paymentDetailsTitle: "Detalles de Pago",
+ paymentDetailsSubtitle: "Por favor, ingrese sus detalles de pago",
+ paymentMethodCreditCard: "Tarjeta de Crédito",
+ paymentMethodBankTransfer: "Transferencia Bancaria",
+ paymentMethodApplePay: "Apple Pay",
+ cardNumberLabel: "Número de Tarjeta",
+ expiryDateLabel: "Fecha de Expiración",
+ cvvLabel: "CVV*",
+ cardHolderLabel: "Titular de la Tarjeta",
+ submitOrderButton: "Enviar Pedido",
+ subTotalLabel: "Subtotal",
+ usDollarsLabel: "Dólares EE.UU.",
+ vatLabel: "IVA",
+ shippingMethodLabel: "Método de Envío",
+ standardFreeDeliveryLabel: "Envío Estándar Gratuito",
+ giftWrappingLabel: "Envoltura de Regalo",
+ includedGiftWrappingLabel: "Envoltura de Regalo Incluida",
+ totalLabel: "Total",
+ grid: {
+ groupPanelEmpty: "Arrastra el encabezado de una columna y suéltalo aquí para agrupar por esa columna",
+ noRecords: "No hay registros disponibles.",
+ pagerFirstPage: "Ir a la primera página",
+ pagerPreviousPage: "Ir a la página anterior",
+ pagerNextPage: "Ir a la página siguiente",
+ pagerLastPage: "Ir a la última página",
+ pagerPage: "Página",
+ pagerOf: "de",
+ pagerTotalPages: "{0}",
+ pagerItems: "artículos",
+ productTitle: "Producto",
+ nameTitle: "Nombre",
+ skuTitle: "SKU",
+ categoryTitle: "Categoría",
+ priceTitle: "Precio",
+ quantityTitle: "Cantidad",
+ totalSalesTitle: "Ventas Totales",
+ pagerInfo: "{0} - {1} de {2} artículos",
+ pagerItemsPerPage: "artículos por página",
+ filterEqOperator: "Es igual a",
+ filterNotEqOperator: "No es igual a",
+ filterIsNullOperator: "Es nulo",
+ filterIsNotNullOperator: "No es nulo",
+ filterIsEmptyOperator: "Está vacío",
+ filterIsNotEmptyOperator: "No está vacío",
+ filterStartsWithOperator: "Comienza con",
+ filterContainsOperator: "Contiene",
+ filterNotContainsOperator: "No contiene",
+ filterEndsWithOperator: "Termina con",
+ filterGteOperator: "Mayor o igual que",
+ filterGtOperator: "Mayor que",
+ filterLteOperator: "Menor o igual que",
+ filterLtOperator: "Menor que",
+ filterIsTrue: "Sí",
+ filterIsFalse: "No",
+ filterBooleanAll: "(Todos)",
+ filterAfterOrEqualOperator: "Es posterior o igual a",
+ filterAfterOperator: "Es posterior a",
+ filterBeforeOperator: "Es anterior a",
+ filterBeforeOrEqualOperator: "Es anterior o igual a",
+ filterSubmitButton: "Filtrar",
+ filterClearButton: "Borrar filtros",
+ filterAndLogic: "Y",
+ filterOrLogic: "O",
+ filterTitle: "Filtrar",
+ sortAscending: "Orden ascendente",
+ sortDescending: "Orden descendente",
+ searchPlaceholder: "Buscar",
+ filterCheckAll: "Seleccionar todo",
+ filterAriaLabel: "Filtrar",
+ sortAriaLabel: "Ordenar",
+ groupColumn: "Columna de grupo",
+ groupExpand: "Expandir grupo",
+ groupCollapse: "Contraer grupo",
+ groupPanelAriaLabel: "Panel de agrupación",
+ ungroupColumn: "Desagrupar columna",
+ detailExpand: "Expandir detalle",
+ detailCollapse: "Contraer detalle",
+ },
+ wizard: {
+ windowTitle: "Vista previa del gráfico",
+ exportButton: "Exportar",
+ exportPDF: "Archivo PDF",
+ exportSVG: "Archivo SVG",
+ exportPNG: "Archivo PNG",
+ tabChart: "Gráfico",
+ tabData: "Datos",
+ tabFormat: "Formato",
+ barChart: "Gráfico de barras",
+ bar: "Barra",
+ stackedBar: "Barras apiladas",
+ "100stackedBar": "Barras apiladas al 100%",
+ pieChart: "Gráfico circular",
+ pie: "Circular",
+ columnChart: "Gráfico de columnas",
+ column: "Columna",
+ stackedColumn: "Columnas apiladas",
+ "100stackedColumn": "Columnas apiladas al 100%",
+ lineChart: "Gráfico de líneas",
+ line: "Línea",
+ stackedLine: "Líneas apiladas",
+ "100stackedLine": "Líneas apiladas al 100%",
+ scatterChart: "Gráfico de dispersión",
+ scatter: "Dispersión",
+ configuration: "Configuración",
+ categoryAxis: "Eje de categorías",
+ xAxis: "Eje X",
+ valueAxis: "Eje de valores",
+ series: "Series",
+ add: "Agregar",
+ chartArea: "Área del gráfico",
+ margins: "Márgenes",
+ auto: "Auto",
+ left: "Izquierda",
+ right: "Derecha",
+ top: "Superior",
+ bottom: "Inferior",
+ background: "Color de fondo",
+ title: "Título",
+ applyTo: "Aplicar a",
+ chartTitle: "Título del gráfico",
+ chartSubtitle: "Subtítulo del gráfico",
+ font: "Fuente",
+ size: "Tamaño",
+ color: "Color",
+ legend: "Leyenda",
+ showLegend: "Mostrar leyenda",
+ position: "Posición",
+ labels: "Etiquetas",
+ rotation: "Rotación",
+ reverseOrder: "Orden inverso",
+ valueAxisTitle: "Título del eje de valores",
+ categoryAxisTitle: "Título del eje de categorías",
+ },
+ chartWizard: {
+ window: {
+ title: "Vista previa del gráfico",
+ },
+ export: {
+ button: "Exportar",
+ PDF: "Archivo PDF",
+ SVG: "Archivo SVG",
+ PNG: "Archivo PNG",
+ },
+ tab: {
+ chart: "Gráfico",
+ data: "Datos",
+ format: "Formato",
+ },
+ chart: {
+ barChart: {
+ expandText: "Gráfico de barras",
+ bar: "Barra",
+ stackedBar: "Barras apiladas",
+ "100%stackedBar": "Barras apiladas al 100%",
+ },
+ pieChart: {
+ expandText: "Gráfico de pastel",
+ pie: "Pastel",
+ },
+ columnChart: {
+ expandText: "Gráfico de columnas",
+ column: "Columna",
+ stackedColumn: "Columnas apiladas",
+ "100%stackedColumn": "Columnas apiladas al 100%",
+ },
+ lineChart: {
+ expandText: "Gráfico de líneas",
+ line: "Línea",
+ stackedLine: "Líneas apiladas",
+ "100%stackedLine": "Líneas apiladas al 100%",
+ },
+ scatterChart: {
+ expandText: "Gráfico de dispersión",
+ scatter: "Dispersión",
+ },
+ },
+ data: {
+ configuration: {
+ expandText: "Configuración",
+ categoryAxis: "Eje de categorías",
+ xAxis: "Eje X",
+ valueAxis: "Eje de valores",
+ series: {
+ title: "Series",
+ add: "Agregar",
+ },
+ },
+ },
+ format: {
+ chartArea: {
+ expandText: "Área del gráfico",
+ margins: {
+ auto: "Auto",
+ left: "Izquierda",
+ right: "Derecha",
+ top: "Arriba",
+ bottom: "Abajo",
+ },
+ background: {
+ color: "Color",
+ },
+ },
+ title: {
+ expandText: "Título",
+ applyTo: "Aplicar a",
+ chartTitle: "Título del gráfico",
+ chartSubtitle: "Subtítulo del gráfico",
+ label: "Título",
+ font: "Fuente",
+ fontPlaceholder: "(fuente heredada)",
+ size: "Tamaño",
+ sizePlaceholder: "px",
+ color: "Color",
+ },
+ series: {
+ expandText: "Series",
+ applyTo: "Aplicar a",
+ allSeries: "Todas las series",
+ color: "Color",
+ showLabels: "Mostrar etiquetas",
+ },
+ legend: {
+ expandText: "Leyenda",
+ showLegend: "Mostrar leyenda",
+ font: "Fuente",
+ fontPlaceholder: "(fuente heredada)",
+ size: "Tamaño",
+ sizePlaceholder: "px",
+ color: "Color",
+ position: {
+ top: "Arriba",
+ bottom: "Abajo",
+ left: "Izquierda",
+ right: "Derecha",
+ },
+ },
+ categoryAxis: {
+ expandText: "Eje de categorías",
+ title: {
+ expandText: "Título",
+ placeholder: "Título del eje",
+ font: "Fuente",
+ fontPlaceholder: "(fuente heredada)",
+ size: "Tamaño",
+ sizePlaceholder: "px",
+ color: "Color",
+ },
+ labels: {
+ text: "Etiquetas",
+ font: "Fuente",
+ fontPlaceholder: "(fuente heredada)",
+ size: "Tamaño",
+ sizePlaceholder: "px",
+ color: "Color",
+ rotation: {
+ text: "Rotación",
+ auto: "Auto",
+ },
+ reverseOrder: "Orden inverso",
+ },
+ },
+ valueAxis: {
+ expandText: "Eje de valores",
+ title: {
+ text: "Título",
+ placeholder: "Título del eje",
+ font: "Fuente",
+ fontPlaceholder: "(fuente heredada)",
+ size: "Tamaño",
+ sizePlaceholder: "px",
+ color: "Color",
+ },
+ labels: {
+ text: "Etiquetas",
+ font: "Fuente",
+ fontPlaceholder: "(fuente heredada)",
+ size: "Tamaño",
+ sizePlaceholder: "px",
+ color: "Color",
+ rotation: {
+ text: "Rotación",
+ auto: "Auto",
+ },
+ },
+ },
+ },
+ }
+ }
+
+ export default es
\ No newline at end of file
diff --git a/examples/ecommerce-jewellery-store/src/data/messages/fr.ts b/examples/ecommerce-jewellery-store/src/data/messages/fr.ts
new file mode 100644
index 00000000..8a647cc2
--- /dev/null
+++ b/examples/ecommerce-jewellery-store/src/data/messages/fr.ts
@@ -0,0 +1,445 @@
+export const fr = {
+ // General Translations
+ title: "Bijoux Vilora",
+ subtitle:
+ "Nous proposons des bijoux exquis, chacun illustrant une élégance intemporelle",
+ buttonText: "Voir les Collections",
+ searchPlaceholder: "Rechercher",
+ addToCartButtonText: "Ajouter au Panier",
+ adminLabel: "Admin",
+ clientLabel: "Client",
+ languageMenuTitle: "Langue",
+ languageEnglish: "Anglais",
+ languageFrench: "Français",
+ languageSpanish: "Espagnol",
+ cookiesText:
+ "Nous utilisons des cookies pour améliorer votre expérience.",
+ rightsReservedText: "Tous droits réservés.",
+ subscribeText: "Abonnez-vous à notre newsletter :",
+ emailPlaceholder: "Email",
+ subscribeButtonText: "S'abonner",
+ filterLabel: "Filtrer :",
+ sortByLabel: "Trier par :",
+ clearFiltersButton: "Effacer les filtres",
+ categoryPlaceholder: "Catégorie",
+ materialPlaceholder: "Matériau",
+ categoriesData: ["Bracelets", "Bagues", "Boucles d'oreilles", "Montres", "Colliers"],
+ statusesData: ["Vente", "Recommandé", "Indispensable"],
+ materialsData: ["Or", "Argent"],
+ followUsText: "Suivez-nous :",
+ shoppingCartTitle: "Panier",
+ backButtonText: "Retour",
+ whyChooseUs: "Pourquoi nous choisir ?",
+ returnPolicyTitle: "Politique de Retour",
+ returnPolicyContent: "Vous pouvez retourner vos articles sous 30 jours pour un remboursement ou un échange complet.",
+ includedGiftWrappingTitle: "Emballage Cadeau Inclus",
+ includedGiftWrappingContent: "Ajoutez un emballage cadeau pour une touche spéciale, accompagné d'un message personnalisé pour vos proches.",
+ discountCodeTitle: "Code Promo Disponible",
+ discountCodeContent: "Appliquez votre code promo lors du paiement pour profiter d'économies exclusives sur votre commande.",
+ removeButtonText: "Supprimer",
+ emptyCartMessage: "Votre panier est vide.",
+ "aureliaContent": "Les bagues sont des pièces de bijouterie polyvalentes qui symbolisent le style personnel, adaptées à la fois pour les occasions spéciales et le quotidien.",
+ proceedToCheckoutButtonText: "Passer à la caisse",
+ "aureliaSubtitle": "Bagues artisanales uniques",
+ customerCareTitle: "Service Client",
+ thankYou: {
+ title: "Merci !",
+ subtitle: "Votre commande a été passée avec succès.",
+ thankYouMessage: "Merci pour votre commande !",
+ orderSubmittedMessage: "Vous avez soumis votre commande",
+ backToShopping: "Retour au shopping"
+ },
+ customerCareLinks: [
+ "Nous Contacter",
+ "Achats en Ligne",
+ "Suivre Votre Commande",
+ "Livraison",
+ "Commandes & Paiement",
+ "Aide",
+ ],
+ ourCompanyTitle: "Notre Entreprise",
+ ourCompanyLinks: [
+ "Emplacements Importants",
+ "Carrières",
+ "Responsabilité d'Entreprise",
+ "Durabilité",
+ "Soins de la Société",
+ ],
+ legalPrivacyTitle: "Légal & Confidentialité",
+ legalPrivacyLinks: [
+ "Conditions d'Utilisation",
+ "Conditions de Vente",
+ "Politique de Retour",
+ "Politique de Confidentialité",
+ "Politique de Cookies",
+ ],
+ // Menu Translations
+ menuHome: "Accueil",
+ menuJewelry: "Bijoux",
+ menuContacts: "Contacts",
+ menuBracelets: "Bracelets",
+ menuRings: "Bagues",
+ menuEarrings: "Boucles d'oreilles",
+ menuWatches: "Montres",
+ menuAll: "Tout",
+ // Other Translations
+ bestsellersTitle: "Nos Meilleures Ventes",
+ bestsellersSubtitle:
+ "Profitez d'une excellente sélection de bijoux fins",
+ buyNowButtonText: "Acheter Maintenant",
+ timelessTitle: "Classiques Intemporels",
+ timelessSubtitle: "Découvrez nos collections artisanales uniques",
+ timelessContent:
+ "Les bijoux subliment le style et ajoutent de l'élégance, chaque pièce raconte une histoire unique.",
+ fineJewelryTitle: "Bijoux Fins",
+ fineJewelrySubtitle: "Découvrez nos collections artisanales uniques",
+ fineJewelryContent:
+ "Les bijoux rehaussent le style et apportent de la sophistication, chaque pièce raconte une histoire distincte.",
+ ringsTitle: "Nos Bagues",
+ ringsSubtitle: "Profitez d'une excellente sélection de bagues fines",
+ watchesTitle: "Nos Montres",
+ watchesSubtitle: "Profitez d'une excellente sélection de montres",
+ watchesContent:
+ "Les montres en or haut de gamme pour hommes sont le summum du luxe, alliant précision et savoir-faire sophistiqué.",
+ servicesTitle: "Services",
+ servicesSubtitle:
+ "Explorez des réparations expertes pour enrichir votre expérience",
+ servicesContent:
+ "Vilora propose des services tels que des designs personnalisés, des réparations et des expertises pour enrichir l'expérience client.",
+ testimonialsTitle: "Mots des Clients",
+ testimonialsSubtitle: "Que disent-ils de nous ?",
+ testimonialsData: [
+ {
+ image: "/testemonials1.jpg",
+ name: "Erica Moore",
+ rating: 5,
+ description:
+ "Vilora a dépassé toutes mes attentes ! Le savoir-faire de mon collier en diamant est absolument époustouflant, et l'attention aux détails est sans égale. Du moment où j'ai passé ma commande jusqu'au jour où elle est arrivée, toute l'expérience a été parfaite.",
+ },
+ {
+ image: "/testemonials2.jpg",
+ name: "Kelvin Hettinger",
+ rating: 4.5,
+ description:
+ "Je ne pourrais pas être plus heureux avec ma bague de fiançailles personnalisée de chez Vilora. L'équipe m'a aidé à concevoir la pièce parfaite, et le résultat final était encore plus beau que ce que j'avais imaginé. Leur service, qualité et dévouement à l'excellence font de Vilora mon choix pour tous les bijoux de luxe.",
+ },
+ {
+ image: "/testemonials3.jpg",
+ name: "Karen Brooks",
+ rating: 5,
+ description:
+ "La collection de Vilora est tout simplement à couper le souffle. J'ai récemment acheté une bague en saphir blanc, et c'est devenu ma pièce préférée. L'élégance et la brillance des bijoux reflètent leur goût impeccable et leurs normes élevées. Je recommande vivement !",
+ },
+ ],
+ // Contacts Page Translations
+ getInTouchTitle: "Contactez-nous",
+ getInTouchSubtitle: "Si vous avez des questions, contactez-nous",
+ fullNameLabel: "Nom complet",
+ fullNamePlaceholder: "Entrez votre nom complet",
+ emailLabel: "Email",
+ phoneNumberLabel: "Numéro de téléphone",
+ typeOfCustomerLabel: "Type de client",
+ dateLabel: "Date",
+ bookSlotButton: "Réserver un créneau",
+ contactsImageAlt: "Contacts",
+ // Thank You Page Translations
+ thankYouTitle: "Merci pour votre commande!",
+ thankYouSubtitle: "Vous avez soumis votre commande",
+ backToShoppingButton: "Retour aux achats",
+ allProductsTitle: "Sélection Fine",
+ allProductsSubtitle: "Appréciez le véritable artisanat",
+ chartSelectedDataButton: "Graphique des données sélectionnées",
+ top3SalesButton: "Top 3 des ventes par catégorie",
+ allProductsContentText:
+ "Les bijoux sont une forme significative d'expression de soi qui améliore le style personnel et ajoute de la beauté à toute occasion.",
+ collectionSerene: 'Collection "SERENE"',
+ collectionAurelia: 'Collection "AURELIA"',
+ collectionRavina: 'Collection "RAVINA"',
+ ourCollectionsTitle: "Nos Collections",
+ ourCollectionsSubtitle: "Profitez d'une excellente sélection de bijoux fins",
+ breadcrumbHome: "Accueil",
+ breadcrumbJewelry: "Bijoux",
+ buyButtonText: "Acheter",
+ handmadePinkDiamondRing: "Bague en diamant rose faite à la main",
+ diamondRingWithPinkRuby: "Bague en diamant avec rubis rose",
+ whiteSandDiamondRing: "Bague en diamant sable blanc",
+ productSubtitle: "En platine avec diamant naturel",
+ productDescription: "Alliances élégantes avec des perles lustrées.",
+ reviewsText: "{0} avis",
+ youMayAlsoLikeTitle: "Vous aimerez aussi",
+ youMayAlsoLikeSubtitle: "Profitez d'une excellente sélection de bijoux fins",
+ categories: {
+ Bracelets: "Bracelets",
+ Rings: "Bagues",
+ Earrings: "Boucles d'oreilles",
+ Watches: "Montres",
+ Necklaces: "Colliers",
+ },
+ diamondWeddingRing: "Bague de mariage en diamant",
+ silverBraceletWithCross: "Bracelet en argent avec croix",
+ pinkSilverBracelet: "Bracelet en argent rose",
+ yellowGoldEarrings: "Boucles d'oreilles en or jaune",
+ silverHeartNecklace: "Collier cœur en argent",
+ handmadeSilverEarrings: "Boucles d'oreilles en argent faites à la main",
+ diamondWeddingBands: "Alliances en diamant",
+ casualSilverWatch: "Montre décontractée en argent",
+ silverBraceletWithOnyx: "Bracelet en argent avec onyx",
+ weddingBandsWithPearls: "Alliances avec perles",
+ silverWeddingBands: "Alliances en argent",
+ handmadeYellowGoldRing: "Bague en or jaune faite à la main",
+ diamondRingWithSapphire: "Bague en diamant avec saphir",
+ silverHeartBracelet: "Bracelet cœur en argent",
+ roseGoldEarringsWithOpal: "Boucles d'oreilles en or rose avec opale",
+ silverBraceletWithTopaz: "Bracelet en argent avec topaze",
+ handmadeDiamondRing: "Bague en diamant faite à la main",
+ diamondRingWithRuby: "Bague en diamant avec rubis",
+ silverWatch: "Montre en argent",
+ goldEarringsWithGarnet: "Boucles d'oreilles en or avec grenat",
+ statuses: {
+ statusSale: "Vente",
+ statusRecommended: "Recommandé",
+ statusMustHave: "Indispensable",
+ },
+ materials: {
+ materialGold: "Or",
+ materialSilver: "Argent",
+ },
+ paymentDetailsTitle: "Détails du paiement",
+ paymentDetailsSubtitle: "Veuillez soumettre vos détails de paiement",
+ paymentMethodCreditCard: "Carte de Crédit",
+ paymentMethodBankTransfer: "Virement Bancaire",
+ paymentMethodApplePay: "Apple Pay",
+ cardNumberLabel: "Numéro de carte",
+ expiryDateLabel: "Date d'expiration",
+ cvvLabel: "CVV*",
+ cardHolderLabel: "Titulaire de la carte",
+ submitOrderButton: "Valider la commande",
+ subTotalLabel: "Sous-total",
+ usDollarsLabel: "Dollars US",
+ vatLabel: "TVA",
+ shippingMethodLabel: "Mode de livraison",
+ standardFreeDeliveryLabel: "Livraison standard gratuite",
+ giftWrappingLabel: "Emballage cadeau",
+ includedGiftWrappingLabel: "Emballage cadeau inclus",
+ totalLabel: "Total",
+ grid: {
+ groupPanelEmpty: "Faites glisser un en-tête de colonne et déposez-le ici pour regrouper par cette colonne",
+ noRecords: "Aucun enregistrement disponible.",
+ pagerFirstPage: "Aller à la première page",
+ pagerPreviousPage: "Aller à la page précédente",
+ pagerNextPage: "Aller à la page suivante",
+ pagerLastPage: "Aller à la dernière page",
+ pagerPage: "Page",
+ pagerOf: "de",
+ pagerTotalPages: "{0}",
+ pagerItems: "articles",
+ pagerInfo: "{0} - {1} sur {2} articles",
+ pagerItemsPerPage: "articles par page",
+ filterEqOperator: "Est égal à",
+ filterNotEqOperator: "N'est pas égal à",
+ filterIsNullOperator: "Est nul",
+ filterIsNotNullOperator: "N'est pas nul",
+ filterIsEmptyOperator: "Est vide",
+ filterIsNotEmptyOperator: "N'est pas vide",
+ filterStartsWithOperator: "Commence par",
+ productTitle: "Produit",
+ nameTitle: "Nom",
+ skuTitle: "SKU",
+ categoryTitle: "Catégorie",
+ priceTitle: "Prix",
+ quantityTitle: "Quantité",
+ totalSalesTitle: "Ventes Totales",
+ filterContainsOperator: "Contient",
+ filterNotContainsOperator: "Ne contient pas",
+ filterEndsWithOperator: "Se termine par",
+ filterGteOperator: "Est supérieur ou égal à",
+ filterGtOperator: "Est supérieur à",
+ filterLteOperator: "Est inférieur ou égal à",
+ filterLtOperator: "Est inférieur à",
+ filterIsTrue: "Oui",
+ filterIsFalse: "Non",
+ filterBooleanAll: "(Tous)",
+ filterAfterOrEqualOperator: "Est après ou égal à",
+ filterAfterOperator: "Est après",
+ filterBeforeOperator: "Est avant",
+ filterBeforeOrEqualOperator: "Est avant ou égal à",
+ filterSubmitButton: "Filtrer",
+ filterClearButton: "Effacer les filtres",
+ filterAndLogic: "Et",
+ filterOrLogic: "Ou",
+ filterTitle: "Filtrer",
+ sortAscending: "Tri croissant",
+ sortDescending: "Tri décroissant",
+ searchPlaceholder: "Chercher",
+ filterCheckAll: "Tout vérifier",
+ pagerItemPerPage: "Articles par page",
+ filterChooseOperator: "Choisir un opérateur",
+ filterSelectedItems: "articles sélectionnés",
+ filterAriaLabel: "Filtrer",
+ sortAriaLabel: "Triable",
+ groupColumn: "Colonne de groupe",
+ groupExpand: "Développer le groupe",
+ groupCollapse: "Réduire le groupe",
+ groupPanelAriaLabel: "panneau de groupe",
+ ungroupColumn: "Dissocier la colonne",
+ detailExpand: "Développer la ligne de détail",
+ detailCollapse: "Réduire la ligne de détail",
+
+ },
+ chartWizard: {
+ window: {
+ title: "Aperçu du graphique",
+ },
+ export: {
+ button: "Exporter",
+ PDF: "Fichier PDF",
+ SVG: "Fichier SVG",
+ PNG: "Fichier PNG",
+ },
+ tab: {
+ chart: "Graphique",
+ data: "Données",
+ format: "Format",
+ },
+ chart: {
+ barChart: {
+ expandText: "Graphique à barres",
+ bar: "Barre",
+ stackedBar: "Barres empilées",
+ "100%stackedBar": "Barres empilées à 100%",
+ },
+ pieChart: {
+ expandText: "Graphique en secteur",
+ pie: "Secteur",
+ },
+ columnChart: {
+ expandText: "Graphique en colonnes",
+ column: "Colonne",
+ stackedColumn: "Colonnes empilées",
+ "100%stackedColumn": "Colonnes empilées à 100%",
+ },
+ lineChart: {
+ expandText: "Graphique en lignes",
+ line: "Ligne",
+ stackedLine: "Lignes empilées",
+ "100%stackedLine": "Lignes empilées à 100%",
+ },
+ scatterChart: {
+ expandText: "Graphique de dispersion",
+ scatter: "Dispersion",
+ },
+ },
+ data: {
+ configuration: {
+ expandText: "Configuration",
+ categoryAxis: "Axe des catégories",
+ xAxis: "Axe X",
+ valueAxis: "Axe des valeurs",
+ series: {
+ title: "Séries",
+ add: "Ajouter",
+ },
+ },
+ },
+ format: {
+ chartArea: {
+ expandText: "Zone du graphique",
+ margins: {
+ auto: "Auto",
+ left: "Gauche",
+ right: "Droite",
+ top: "Haut",
+ bottom: "Bas",
+ },
+ background: {
+ color: "Couleur",
+ },
+ },
+ title: {
+ expandText: "Titre",
+ applyTo: "Appliquer à",
+ chartTitle: "Titre du graphique",
+ chartSubtitle: "Sous-titre du graphique",
+ label: "Titre",
+ font: "Police",
+ fontPlaceholder: "(police héritée)",
+ size: "Taille",
+ sizePlaceholder: "px",
+ color: "Couleur",
+ },
+ series: {
+ expandText: "Séries",
+ applyTo: "Appliquer à",
+ allSeries: "Toutes les séries",
+ color: "Couleur",
+ showLabels: "Afficher les étiquettes",
+ },
+ legend: {
+ expandText: "Légende",
+ showLegend: "Afficher la légende",
+ font: "Police",
+ fontPlaceholder: "(police héritée)",
+ size: "Taille",
+ sizePlaceholder: "px",
+ color: "Couleur",
+ position: {
+ top: "Haut",
+ bottom: "Bas",
+ left: "Gauche",
+ right: "Droite",
+ },
+ },
+ categoryAxis: {
+ expandText: "Axe des catégories",
+ title: {
+ expandText: "Titre",
+ placeholder: "Titre de l'axe",
+ font: "Police",
+ fontPlaceholder: "(police héritée)",
+ size: "Taille",
+ sizePlaceholder: "px",
+ color: "Couleur",
+ },
+ labels: {
+ text: "Étiquettes",
+ font: "Police",
+ fontPlaceholder: "(police héritée)",
+ size: "Taille",
+ sizePlaceholder: "px",
+ color: "Couleur",
+ rotation: {
+ text: "Rotation",
+ auto: "Auto",
+ },
+ reverseOrder: "Ordre inversé",
+ },
+ },
+ valueAxis: {
+ expandText: "Axe des valeurs",
+ title: {
+ text: "Titre",
+ placeholder: "Titre de l'axe",
+ font: "Police",
+ fontPlaceholder: "(police héritée)",
+ size: "Taille",
+ sizePlaceholder: "px",
+ color: "Couleur",
+ },
+ labels: {
+ text: "Étiquettes",
+ font: "Police",
+ fontPlaceholder: "(police héritée)",
+ size: "Taille",
+ sizePlaceholder: "px",
+ color: "Couleur",
+ rotation: {
+ text: "Rotation",
+ auto: "Auto",
+ },
+ },
+ },
+ },
+ },
+ }
+
+ export default fr
diff --git a/examples/ecommerce-jewellery-store/src/data/types.ts b/examples/ecommerce-jewellery-store/src/data/types.ts
index 6de34d0b..9b176e5a 100644
--- a/examples/ecommerce-jewellery-store/src/data/types.ts
+++ b/examples/ecommerce-jewellery-store/src/data/types.ts
@@ -26,10 +26,63 @@ export type BackgroundImageProps = {
img: string;
};
+export interface GridTranslations {
+ productTitle: string;
+ nameTitle: string;
+ skuTitle: string;
+ categoryTitle: string;
+ priceTitle: string;
+ quantityTitle: string;
+ totalSalesTitle: string;
+ }
+
+ export interface Translations {
+ grid: GridTranslations;
+ chartSelectedDataButton: string;
+ top3SalesButton: string;
+ languageSpanish: string;
+ searchPlaceholder: string;
+ adminLabel: string;
+ clientLabel: string;
+ shoppingCartTitle: string;
+ backButtonText: string;
+ emptyCartMessage: string;
+ paymentDetailsTitle: string;
+ paymentDetailsSubtitle: string;
+ fullNameLabel: string;
+ emailLabel: string;
+ phoneNumberLabel: string;
+ proceedToCheckoutButtonText: string;
+ whyChooseUs: string;
+ returnPolicyTitle: string;
+ returnPolicyContent: string;
+ includedGiftWrappingTitle: string;
+ includedGiftWrappingContent: string;
+ discountCodeTitle: string;
+ discountCodeContent: string;
+ testimonialsData: { name: string; rating: number; description: string }[];
+ testimonialsTitle: string;
+ testimonialsSubtitle: string;
+ statuses: { [key: string]: string };
+ categories: { [key: string]: string };
+ materials: { [key: string]: string };
+ diamondWeddingRing: string;
+ silverBraceletWithCross: string;
+ [key: string]: any;
+ }
+
+ export type LanguageContextType = {
+ t: Translations;
+ language: "en" | "fr" | "es";
+ setLanguage: React.Dispatch
>;
+ };
+
export type CardListProps = {
data: any[];
+ layout: "grid" | "list";
}
+
export type SectionProps = {
children: React.ReactNode
}
diff --git a/examples/ecommerce-jewellery-store/src/helpers/LanguageContext.tsx b/examples/ecommerce-jewellery-store/src/helpers/LanguageContext.tsx
new file mode 100644
index 00000000..6f805378
--- /dev/null
+++ b/examples/ecommerce-jewellery-store/src/helpers/LanguageContext.tsx
@@ -0,0 +1,33 @@
+import React, { createContext, useContext, useState, ReactNode } from "react";
+import enMessages from "../data/messages/en";
+import frMessages from "../data/messages/fr";
+import esMessages from "../data/messages/es";
+import { LanguageContextType, Translations } from "../data/types";
+
+const translations = {
+ en: enMessages,
+ fr: frMessages,
+ es: esMessages,
+};
+
+
+const LanguageContext = createContext(undefined);
+
+export const LanguageProvider: React.FC<{ children: ReactNode }> = ({ children }) => {
+ const [language, setLanguage] = useState<"en" | "fr" | "es">("en");
+ const t: Translations = translations[language];
+
+ return (
+
+ {children}
+
+ );
+};
+
+export const useLanguageContext = (): LanguageContextType => {
+ const context = useContext(LanguageContext);
+ if (!context) {
+ throw new Error("useLanguageContext must be used within a LanguageProvider");
+ }
+ return context;
+};
diff --git a/examples/ecommerce-jewellery-store/src/pages/AllProductsListView.tsx b/examples/ecommerce-jewellery-store/src/pages/AllProductsListView.tsx
index 866fa47e..3dda0cdb 100644
--- a/examples/ecommerce-jewellery-store/src/pages/AllProductsListView.tsx
+++ b/examples/ecommerce-jewellery-store/src/pages/AllProductsListView.tsx
@@ -1,5 +1,4 @@
import * as React from "react";
-
import bracelets from "@/assets/bracelets.png?url";
import necklace from "@/assets/necklace_1.jfif?url";
import ring from "@/assets/ring_1.jfif?url";
@@ -7,92 +6,105 @@ import jewel from "@/assets/1111.jfif?url";
import { Layout } from "../components/Layout";
import { OrderedImgText } from "../components/OrderedImageCard";
import { CustomSection } from "../components/CustomizedSection";
-import { listData } from "../data/listData";
import { FilterComponent } from "../components/FilterComponent";
import { CardsList } from "../components/CardsList";
import { CategoryList } from "../components/CategoryList";
-import { CardDescriptor } from "../data/types";
-import { DataModel } from "../data/types";
-
import { Breadcrumb } from "@progress/kendo-react-layout";
import { Button, ButtonGroup } from "@progress/kendo-react-buttons";
import { layout2By2Icon, gridLayoutIcon } from "@progress/kendo-svg-icons";
import { process, State } from "@progress/kendo-data-query";
+import { useLanguageContext } from "../helpers/LanguageContext";
+import { useTranslatedListData } from "../data/listData";
+import { CardDescriptor, DataModel } from "../data/types";
export const AllProductsListView = () => {
- const title = "Fine Selection";
- const subtitle = "Enjoy the real craftsmanship";
- const contentText =
- "Jewelry is a meaningful form of self-expression that enhances personal style and adds beauty to any occasion.";
- const order = "first";
+ const { t } = useLanguageContext();
+ const translatedListData = useTranslatedListData();
+
+ const [data, setData] = React.useState(translatedListData);
+ const [currentLayout, setCurrentLayout] = React.useState<"grid" | "list">("grid");
- const [data, setData] = React.useState(listData);
-
const updateUI = (newState: State) => {
- const newData = process(listData, newState)
- setData(newData.data)
+ const newData = process(translatedListData, newState);
+ setData(newData.data);
};
+ const BreakcrumbData: DataModel[] = [
+ { text: t.breadcrumbHome },
+ { text: t.breadcrumbJewelry },
+ ];
+
const cards: CardDescriptor[] = [
{
img: necklace,
- collectionText: 'Collection "SERENE"',
+ collectionText: t.collectionSerene,
},
{
img: ring,
- collectionText: 'Collection "AURELIA"',
+ collectionText: t.collectionAurelia,
},
{
img: jewel,
- collectionText: 'Collection "RAVINA"',
+ collectionText: t.collectionRavina,
},
];
- const BreakcrumbData: DataModel[] = [{
- text: "Home"
- },
- {
- text: "Jewelry"
- }]
+
return (
<>
+
-
+
+
-
-
+
+
-
-
+
+
-
+
+
-
+
>
);
diff --git a/examples/ecommerce-jewellery-store/src/pages/Contacts.tsx b/examples/ecommerce-jewellery-store/src/pages/Contacts.tsx
index 5fe9e5ac..a4dad81d 100644
--- a/examples/ecommerce-jewellery-store/src/pages/Contacts.tsx
+++ b/examples/ecommerce-jewellery-store/src/pages/Contacts.tsx
@@ -6,7 +6,7 @@ import CityInput from '../components/CityInput';
import PhoneInput from '../components/PhoneInput';
import AppointmentInput from '../components/AppointmentInput';
import DateChooserInput from '../components/DateChooserInput';
-import ContactsRadioButtons from '../components/ContactsRadioButtons'
+import ContactsRadioButtons from '../components/ContactsRadioButtons';
import contactsImage from '@/assets/contactsImage.png';
import { Button } from '@progress/kendo-react-buttons';
import { useNavigate } from 'react-router-dom';
@@ -18,9 +18,11 @@ import {
FieldWrapper,
} from '@progress/kendo-react-form';
import { Label } from '@progress/kendo-react-labels';
+import { useLanguageContext } from '../helpers/LanguageContext';
const Contacts: React.FC = () => {
const navigate = useNavigate();
+ const { t } = useLanguageContext();
const onSubmitClick = () => {
navigate('/thankyou');
@@ -31,27 +33,27 @@ const Contacts: React.FC = () => {
-
Get in touch
-
If you have any questions, contact us
+
{t.getInTouchTitle}
+
{t.getInTouchSubtitle}
{
+ const { t } = useLanguageContext();
+ const translatedListData = useTranslatedListData();
+ const order = 'first'
+ const [data, setData] = React.useState(translatedListData);
+ const cards: CardDescriptor[] = [
+ {
+ img: necklace,
+ collectionText: t.collectionSerene,
+ },
+ {
+ img: jewel,
+ collectionText: t.collectionRavina,
+ },
+ {
+ img: tolos,
+ collectionText: "TOLOS",
+ },
+ ];
-export const DetailedCategory = () => {
- const [data, setData] = React.useState(listData);
- const title = "AURELIA Collection";
- const subtitle = "Unique handmade rings";
- const contentText =
- "Rings are versatile jewelry pieces that symbolize personal style, suitable for both special occasions and everyday wear.";
- const order = "first";
+ const BreakcrumbData: DataModel[] = [
+ {
+ text: t.breadcrumbHome,
+ },
+ {
+ text: t.breadcrumbJewelry,
+ },
+ {
+ text: t.categories.Rings,
+ },
+ ];
const updateUI = (newState: State) => {
- const newData = process(listData, newState)
- setData(newData.data)
+ const newData = process(translatedListData, newState);
+ setData(newData.data);
};
return (
@@ -69,9 +67,12 @@ export const DetailedCategory = () => {
}}
>
{
-
+
-
+
@@ -93,10 +98,10 @@ export const DetailedCategory = () => {
-
+
-
+
>
);
diff --git a/examples/ecommerce-jewellery-store/src/pages/Home.tsx b/examples/ecommerce-jewellery-store/src/pages/Home.tsx
index 03d8d584..1acf0bc0 100644
--- a/examples/ecommerce-jewellery-store/src/pages/Home.tsx
+++ b/examples/ecommerce-jewellery-store/src/pages/Home.tsx
@@ -21,6 +21,7 @@ import homeServicesImage from '../assets/homeServicesImage.png';
import { Testemonials } from '../components/Testemonials';
import { useAdminContext } from "../helpers/AdminContext";
import AdminView from "../components/AdminView";
+import { useLanguageContext } from "../helpers/LanguageContext";
const data: CardDescriptor[] = [
{ img: silverBraceletOnyx, collectionText: "Silver Bracelet with Onyx" },
@@ -41,16 +42,14 @@ const watchData: CardDescriptor[] = [
const Home: React.FC = () => {
const { isAdmin } = useAdminContext();
- const title = "Vilora Jewelry";
- const subtitle = "we offer exquisite jewelry, each showcasing timeless elegance";
- const buttonText = "See Collections";
+ const { t } = useLanguageContext(); // Access translations
return (
<>
@@ -67,65 +66,77 @@ const Home: React.FC = () => {
className="k-d-grid k-grid-cols-12 k-justify-content-center k-align-items-center k-col-span-12"
style={{ paddingTop: "60px" }}
>
-
+
-
+
-
+
diff --git a/examples/ecommerce-jewellery-store/src/pages/PaymentDetails.tsx b/examples/ecommerce-jewellery-store/src/pages/PaymentDetails.tsx
index 5abba0d5..ede7bf40 100644
--- a/examples/ecommerce-jewellery-store/src/pages/PaymentDetails.tsx
+++ b/examples/ecommerce-jewellery-store/src/pages/PaymentDetails.tsx
@@ -21,9 +21,11 @@ import {
} from "@progress/kendo-react-labels";
import creditCards from '../assets/creditCards.png';
+import { useLanguageContext } from "../helpers/LanguageContext";
const PaymentDetails: React.FC = () => {
const navigate = useNavigate();
+ const { t } = useLanguageContext();
const onSubmitClick = () => {
navigate("/thankyou")
@@ -34,18 +36,18 @@ const PaymentDetails: React.FC = () => {
-
Payment Details
-
Please, submit your payment details
+
{t.paymentDetailsTitle}
+
{t.paymentDetailsSubtitle}
-
+
-
+
-
+
-
+
-
Sub total
-
US Dollars
-
VAT
-
US Dollars
-
Shipping Method
-
Standard Free Delivery
-
Gift Wrapping
-
Included Gift Wrapping
-
Total
-
US Dollars
+
{t.subTotalLabel}
+
{t.usDollarsLabel}
+
{t.vatLabel}
+
{t.usDollarsLabel}
+
{t.shippingMethodLabel}
+
{t.standardFreeDeliveryLabel}
+
{t.giftWrappingLabel}
+
{t.includedGiftWrappingLabel}
+
{t.totalLabel}
+
{t.usDollarsLabel}
diff --git a/examples/ecommerce-jewellery-store/src/pages/ProductsDetails.tsx b/examples/ecommerce-jewellery-store/src/pages/ProductsDetails.tsx
index dda3ea55..3527bbc7 100644
--- a/examples/ecommerce-jewellery-store/src/pages/ProductsDetails.tsx
+++ b/examples/ecommerce-jewellery-store/src/pages/ProductsDetails.tsx
@@ -1,6 +1,6 @@
import { useParams } from "react-router-dom";
import { ProductCard } from "../components/ProductCard";
-import { listData } from "../data/listData";
+import { useTranslatedListData } from "../data/listData";
import { DataModel } from "../data/types";
import { Layout } from "../components/Layout";
import { CategoryList } from "../components/CategoryList";
@@ -11,15 +11,18 @@ import whiteSandDiamondRing from "../assets/whiteSandDiamondRing.jpg";
import { CustomSection } from "../components/CustomizedSection";
import { useCart } from "../helpers/CartContext";
import { useNavigate } from "react-router-dom";
+import { useLanguageContext } from "../helpers/LanguageContext";
export const ProductDetails = () => {
const { id } = useParams();
const productId = id ? parseInt(id, 10) : null;
- const descriptionText =
- "Elegant wedding bands featuring lustrous pearls, beautifully set in sleek, timeless bands. These rings offer a unique blend of classic charm and modern sophistication, making them a perfect symbol of everlasting love. The delicate pearls add a touch of grace, creating a refined and distinctive look that’s perfect for a memorable occasion.";
+ const { t } = useLanguageContext();
+ const translatedListData = useTranslatedListData();
+
+ const descriptionText = t.productDescription;
const { addItemToCart } = useCart();
- const productToAdd = listData.find((item) => item.id === productId);
+ const productToAdd = translatedListData.find((item) => item.id === productId);
const navigate = useNavigate();
const addToCart = () => {
@@ -32,27 +35,29 @@ export const ProductDetails = () => {
const data: CardDescriptor[] = [
{
img: diamondRingPinkRuby,
- collectionText: "Diamond Ring with Pink Ruby",
+ collectionText: t.diamondRingWithPinkRuby,
},
{
img: whiteSandDiamondRing,
- collectionText: "White Sand Diamond Ring",
+ collectionText: t.whiteSandDiamondRing,
},
{
img: homemadePinkDiamondRing,
- collectionText: "Handmade Pink Diamond Ring",
+ collectionText: t.handmadePinkDiamondRing,
},
];
const BreakcrumbData: DataModel[] = [
{
- text: "Home",
+ text: t.breadcrumbHome,
},
{
- text: "Jewelry",
+ text: t.breadcrumbJewelry,
},
{
- text: productToAdd?.category,
+ text: productToAdd?.category
+ ? t.categories[productToAdd.category as keyof typeof t.categories]
+ : "",
},
];
@@ -62,22 +67,22 @@ export const ProductDetails = () => {
+ />
+ />
>
diff --git a/examples/ecommerce-jewellery-store/src/pages/ThankYou.tsx b/examples/ecommerce-jewellery-store/src/pages/ThankYou.tsx
index e3691f01..253fd172 100644
--- a/examples/ecommerce-jewellery-store/src/pages/ThankYou.tsx
+++ b/examples/ecommerce-jewellery-store/src/pages/ThankYou.tsx
@@ -4,21 +4,35 @@ import { BackgroundImage } from '../components/BackgroundImage';
import present from "@/assets/present.png";
import { Button } from "@progress/kendo-react-buttons";
import { useNavigate } from 'react-router-dom';
+import { useLanguageContext } from '../helpers/LanguageContext';
const ThankYou: React.FC = () => {
const navigate = useNavigate();
+ const { t } = useLanguageContext();
const onBacktoShoppingClick = () => {
navigate("/products");
- }
+ };
+
return (
<>
-
+
-
Thank You For Your Order!
-
You have submitted your order
-
Back to Shopping
+
{t?.thankYou?.thankYouMessage}
+
{t?.thankYou?.orderSubmittedMessage}
+
+ {t?.thankYou?.backToShopping}
+
>