From 1a8adf9b9b2d5dce1b4fc4500b510f19477301dc Mon Sep 17 00:00:00 2001
From: Sergey Krylov <krylov.sa@ispras.ru>
Date: Wed, 19 Feb 2025 14:21:37 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?=
 =?UTF-8?q?=D0=BE=D0=B5=20=D0=BD=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD?=
 =?UTF-8?q?=D0=B8=D0=B5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 __init__.py                                   |   4 +
 __manifest__.py                               |  29 +
 controllers/__init__.py                       |   4 +
 controllers/main.py                           |  71 +++
 controllers/website_sale.py                   |  85 +++
 data/demo.xml                                 |  10 +
 i18n/ar.po                                    | 114 ++++
 i18n/bg.po                                    | 118 ++++
 i18n/ca.po                                    | 121 ++++
 i18n/cs.po                                    | 116 ++++
 i18n/da.po                                    | 115 ++++
 i18n/de.po                                    | 114 ++++
 i18n/es.po                                    | 114 ++++
 i18n/es_419.po                                | 114 ++++
 i18n/et.po                                    | 118 ++++
 i18n/fa.po                                    | 116 ++++
 i18n/fi.po                                    | 120 ++++
 i18n/fr.po                                    | 114 ++++
 i18n/he.po                                    | 116 ++++
 i18n/hr.po                                    | 126 ++++
 i18n/hu.po                                    | 119 ++++
 i18n/id.po                                    | 114 ++++
 i18n/it.po                                    | 115 ++++
 i18n/ja.po                                    | 114 ++++
 i18n/ko.po                                    | 113 ++++
 i18n/lb.po                                    | 120 ++++
 i18n/lt.po                                    | 115 ++++
 i18n/lv.po                                    | 116 ++++
 i18n/mn.po                                    | 126 ++++
 i18n/nb.po                                    | 126 ++++
 i18n/nl.po                                    | 115 ++++
 i18n/pl.po                                    | 113 ++++
 i18n/pt.po                                    | 116 ++++
 i18n/pt_BR.po                                 | 116 ++++
 i18n/ro.po                                    | 126 ++++
 i18n/ru.po                                    | 116 ++++
 i18n/sk.po                                    | 113 ++++
 i18n/sl.po                                    | 118 ++++
 i18n/sr.po                                    | 115 ++++
 i18n/sv.po                                    | 118 ++++
 i18n/th.po                                    | 114 ++++
 i18n/tr.po                                    | 120 ++++
 i18n/uk.po                                    | 115 ++++
 i18n/vi.po                                    | 113 ++++
 i18n/website_sale_product_configurator.pot    | 109 ++++
 i18n/zh_CN.po                                 | 114 ++++
 i18n/zh_TW.po                                 | 113 ++++
 models/__init__.py                            |   4 +
 models/sale_order.py                          |  25 +
 models/website.py                             |  12 +
 .../src/js/sale_product_configurator_modal.js | 540 ++++++++++++++++++
 static/src/js/website_sale_options.js         | 124 ++++
 static/src/scss/website_sale_options.scss     |  15 +
 static/tests/tours/website_sale_buy.js        |  20 +
 ...ebsite_sale_preconfigured_variant_price.js |  19 +
 ...bsite_sale_shop_custom_attributes_value.js |  57 ++
 .../website_sale_variants_modal_window.js     |  65 +++
 tests/__init__.py                             |   5 +
 tests/test_customize.py                       |  15 +
 tests/test_website_sale_configurator.py       | 148 +++++
 views/templates.xml                           | 172 ++++++
 61 files changed, 6202 insertions(+)
 create mode 100644 __init__.py
 create mode 100644 __manifest__.py
 create mode 100644 controllers/__init__.py
 create mode 100644 controllers/main.py
 create mode 100644 controllers/website_sale.py
 create mode 100644 data/demo.xml
 create mode 100644 i18n/ar.po
 create mode 100644 i18n/bg.po
 create mode 100644 i18n/ca.po
 create mode 100644 i18n/cs.po
 create mode 100644 i18n/da.po
 create mode 100644 i18n/de.po
 create mode 100644 i18n/es.po
 create mode 100644 i18n/es_419.po
 create mode 100644 i18n/et.po
 create mode 100644 i18n/fa.po
 create mode 100644 i18n/fi.po
 create mode 100644 i18n/fr.po
 create mode 100644 i18n/he.po
 create mode 100644 i18n/hr.po
 create mode 100644 i18n/hu.po
 create mode 100644 i18n/id.po
 create mode 100644 i18n/it.po
 create mode 100644 i18n/ja.po
 create mode 100644 i18n/ko.po
 create mode 100644 i18n/lb.po
 create mode 100644 i18n/lt.po
 create mode 100644 i18n/lv.po
 create mode 100644 i18n/mn.po
 create mode 100644 i18n/nb.po
 create mode 100644 i18n/nl.po
 create mode 100644 i18n/pl.po
 create mode 100644 i18n/pt.po
 create mode 100644 i18n/pt_BR.po
 create mode 100644 i18n/ro.po
 create mode 100644 i18n/ru.po
 create mode 100644 i18n/sk.po
 create mode 100644 i18n/sl.po
 create mode 100644 i18n/sr.po
 create mode 100644 i18n/sv.po
 create mode 100644 i18n/th.po
 create mode 100644 i18n/tr.po
 create mode 100644 i18n/uk.po
 create mode 100644 i18n/vi.po
 create mode 100644 i18n/website_sale_product_configurator.pot
 create mode 100644 i18n/zh_CN.po
 create mode 100644 i18n/zh_TW.po
 create mode 100644 models/__init__.py
 create mode 100644 models/sale_order.py
 create mode 100644 models/website.py
 create mode 100644 static/src/js/sale_product_configurator_modal.js
 create mode 100644 static/src/js/website_sale_options.js
 create mode 100644 static/src/scss/website_sale_options.scss
 create mode 100644 static/tests/tours/website_sale_buy.js
 create mode 100644 static/tests/tours/website_sale_preconfigured_variant_price.js
 create mode 100644 static/tests/tours/website_sale_shop_custom_attributes_value.js
 create mode 100644 static/tests/tours/website_sale_variants_modal_window.js
 create mode 100644 tests/__init__.py
 create mode 100644 tests/test_customize.py
 create mode 100644 tests/test_website_sale_configurator.py
 create mode 100644 views/templates.xml

diff --git a/__init__.py b/__init__.py
new file mode 100644
index 0000000..aa4d0fd
--- /dev/null
+++ b/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import controllers
+from . import models
diff --git a/__manifest__.py b/__manifest__.py
new file mode 100644
index 0000000..90aa9c1
--- /dev/null
+++ b/__manifest__.py
@@ -0,0 +1,29 @@
+# -*- coding: utf-8 -*-
+{
+    'name': "Website Sale Product Configurator",
+    'summary': "Bridge module for website_sale / sale_product_configurator",
+    'description': """
+Bridge module to make the website e-commerce compatible with the product configurator
+    """,
+    'category': 'Hidden',
+    'depends': ['website_sale', 'sale_product_configurator'],
+    'auto_install': True,
+    'data': [
+        'views/templates.xml',
+    ],
+    'demo': [
+        'data/demo.xml',
+    ],
+    'assets': {
+        'web.assets_frontend': [
+            ('before', 'website_sale/static/src/js/website_sale.js', 'website_sale_product_configurator/static/src/js/sale_product_configurator_modal.js'),
+            'website_sale/static/src/scss/product_configurator.scss',
+            'website_sale_product_configurator/static/src/scss/website_sale_options.scss',
+            'website_sale_product_configurator/static/src/js/website_sale_options.js',
+        ],
+        'web.assets_tests': [
+            'website_sale_product_configurator/static/tests/**/*',
+        ],
+    },
+    'license': 'LGPL-3',
+}
diff --git a/controllers/__init__.py b/controllers/__init__.py
new file mode 100644
index 0000000..66be1a9
--- /dev/null
+++ b/controllers/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import main
+from . import website_sale
diff --git a/controllers/main.py b/controllers/main.py
new file mode 100644
index 0000000..343ec00
--- /dev/null
+++ b/controllers/main.py
@@ -0,0 +1,71 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.http import Controller, request, route
+
+
+class WebsiteSaleProductConfiguratorController(Controller):
+
+    @route(
+        '/sale_product_configurator/show_advanced_configurator',
+        type='json', auth='public', methods=['POST'], website=True,
+    )
+    def show_advanced_configurator(
+        self, product_id, variant_values, add_qty=1, force_dialog=False, **kw,
+    ):
+        product = request.env['product.product'].browse(int(product_id))
+        product_template = product.product_tmpl_id
+        combination = request.env['product.template.attribute.value'].browse(variant_values)
+        has_optional_products = product.optional_product_ids.filtered(
+            lambda p: p._is_add_to_cart_possible(combination)
+                      and (not request.website.prevent_zero_price_sale or p._get_contextual_price())
+        )
+
+        already_configured = bool(combination)
+        if not force_dialog and not has_optional_products and (
+            product.product_variant_count <= 1 or already_configured
+        ):
+            # The modal is not shown if there are no optional products and
+            # the main product either has no variants or is already configured
+            return False
+
+        add_qty = float(add_qty)
+        combination_info = product_template._get_combination_info(
+            combination=combination,
+            product_id=product.id,
+            add_qty=add_qty,
+        )
+
+        return request.env['ir.ui.view']._render_template(
+            'website_sale_product_configurator.optional_products_modal',
+            {
+                'product': product,
+                'product_template': product_template,
+                'combination': combination,
+                'combination_info': combination_info,
+                'add_qty': add_qty,
+                'parent_name': product.name,
+                'variant_values': variant_values,
+                'already_configured': already_configured,
+                'mode': kw.get('mode', 'add'),
+                'product_custom_attribute_values': kw.get('product_custom_attribute_values', None),
+                'no_attribute': kw.get('no_attribute', False),
+                'custom_attribute': kw.get('custom_attribute', False),
+            }
+        )
+
+    @route(
+        '/sale_product_configurator/optional_product_items',
+        type='json', auth='public', methods=['POST'], website=True,
+    )
+    def optional_product_items(self, product_id, add_qty=1, **kw):
+        product = request.env['product.product'].browse(int(product_id))
+
+        return request.env['ir.ui.view']._render_template(
+            'website_sale_product_configurator.optional_product_items',
+            {
+                'product': product,
+                'parent_name': product.name,
+                'parent_combination': product.product_template_attribute_value_ids,
+                'add_qty': float(add_qty) or 1.0,
+            }
+        )
diff --git a/controllers/website_sale.py b/controllers/website_sale.py
new file mode 100644
index 0000000..56fd3d7
--- /dev/null
+++ b/controllers/website_sale.py
@@ -0,0 +1,85 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import json
+
+from odoo.http import request, route
+
+from odoo.addons.website_sale.controllers import main
+
+
+class WebsiteSale(main.WebsiteSale):
+
+    def _prepare_product_values(self, product, category, search, **kwargs):
+        values = super()._prepare_product_values(product, category, search, **kwargs)
+
+        values['optional_product_ids'] = [p.with_context(active_id=p.id) for p in product.optional_product_ids]
+        return values
+
+    @route(
+        '/shop/cart/update_option',
+        type='json',
+        auth='public',
+        methods=['POST'],
+        website=True,
+        multilang=False,
+    )
+    def cart_options_update_json(self, product_and_options, lang=None, **kwargs):
+        """This route is called when submitting the optional product modal.
+            The product without parent is the main product, the other are options.
+            Options need to be linked to their parents with a unique ID.
+            The main product is the first product in the list and the options
+            need to be right after their parent.
+            product_and_options {
+                'product_id',
+                'product_template_id',
+                'quantity',
+                'parent_unique_id',
+                'unique_id',
+                'product_custom_attribute_values',
+                'no_variant_attribute_values'
+            }
+        """
+        if lang:
+            request.website = request.website.with_context(lang=lang)
+
+        order = request.website.sale_get_order(force_create=True)
+        if order.state != 'draft':
+            request.session['sale_order_id'] = None
+            order = request.website.sale_get_order(force_create=True)
+
+        product_and_options = json.loads(product_and_options)
+        if product_and_options:
+            # The main product is the first, optional products are the rest
+            main_product = product_and_options[0]
+            values = order._cart_update(
+                product_id=main_product['product_id'],
+                add_qty=main_product['quantity'],
+                product_custom_attribute_values=main_product['product_custom_attribute_values'],
+                no_variant_attribute_values=main_product['no_variant_attribute_values'],
+                **kwargs
+            )
+
+            line_ids = [values['line_id']]
+
+            if values['line_id']:
+                # Link option with its parent iff line has been created.
+                option_parent = {main_product['unique_id']: values['line_id']}
+                for option in product_and_options[1:]:
+                    parent_unique_id = option['parent_unique_id']
+                    option_values = order._cart_update(
+                        product_id=option['product_id'],
+                        set_qty=option['quantity'],
+                        linked_line_id=option_parent[parent_unique_id],
+                        product_custom_attribute_values=option['product_custom_attribute_values'],
+                        no_variant_attribute_values=option['no_variant_attribute_values'],
+                        **kwargs
+                    )
+                    option_parent[option['unique_id']] = option_values['line_id']
+                    line_ids.append(option_values['line_id'])
+
+            values['notification_info'] = self._get_cart_notification_information(order, line_ids)
+
+        values['cart_quantity'] = order.cart_quantity
+        request.session['website_sale_cart_quantity'] = order.cart_quantity
+
+        return values
diff --git a/data/demo.xml b/data/demo.xml
new file mode 100644
index 0000000..6697d42
--- /dev/null
+++ b/data/demo.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo noupdate="1">
+    <record id="sale_product_configurator.product_product_1_product_template" model="product.template">
+            <field name="website_sequence">9980</field>
+            <field name="is_published" eval="True"/>
+        </record>
+    <record id="product.product_product_4_product_template" model="product.template">
+        <field name="optional_product_ids" eval="[(6,0,[ref('product.product_product_11_product_template'), ref('website_sale.product_product_1_product_template')])]"/>
+    </record>
+</odoo>
diff --git a/i18n/ar.po b/i18n/ar.po
new file mode 100644
index 0000000..e0e30d8
--- /dev/null
+++ b/i18n/ar.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ar\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> إضافة إلى عربة التسوق "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">السعر</span> "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">المنتج</span> "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>الإجمالي:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "إجراء الإضافة إلى عربة التسوق "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "إضافة واحدة"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "إضافة إلى عربة التسوق "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "الخيارات المتاحة:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "متابعة التسوق"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "اترك القرار للمستخدم (حوار) "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "الخيار غير متاح"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "متابعة عملية الشراء"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "صورة المنتج"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "الكمية"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "إزالة واحد "
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "أمر البيع"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "الموقع الإلكتروني"
diff --git a/i18n/bg.po b/i18n/bg.po
new file mode 100644
index 0000000..8f5961c
--- /dev/null
+++ b/i18n/bg.po
@@ -0,0 +1,118 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Anton Vassilev, 2023
+# Camille Dantinne <cmd@odoo.com>, 2023
+# Rosen Vladimirov <vladimirov.rosen@gmail.com>, 2023
+# Martin Trigaux, 2023
+# Igor Sheludko <igor.sheludko@gmail.com>, 2023
+# Maria Boyadjieva <marabo2000@gmail.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Maria Boyadjieva <marabo2000@gmail.com>, 2023\n"
+"Language-Team: Bulgarian (https://app.transifex.com/odoo/teams/41243/bg/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: bg\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Добави в количката"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Общо:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Добави в количката"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Продължете да пазарувате"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Продължете към плащане"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Изображение на продукта"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Количество"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Поръчка"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Уебсайт"
diff --git a/i18n/ca.po b/i18n/ca.po
new file mode 100644
index 0000000..8f895ab
--- /dev/null
+++ b/i18n/ca.po
@@ -0,0 +1,121 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# marcescu, 2023
+# Ivan Espinola, 2023
+# Carles Antoli <carlesantoli@hotmail.com>, 2023
+# Quim - eccit <quim@eccit.com>, 2023
+# Sandra Franch <sandra.franch@upc.edu>, 2023
+# Arnau Ros, 2023
+# Óscar Fonseca <tecnico@pyming.com>, 2023
+# Martin Trigaux, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Catalan (https://app.transifex.com/odoo/teams/41243/ca/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ca\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Afegir a la cistella"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Preu</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Producte</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Afegeix a l'acció Cart"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Afegir-ne un"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Afegir a la cistella"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opcions disponibles:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continuar comprant"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Deixa que l'usuari decideixi (diàleg)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opció no disponible"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Vés a la caixa"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imatge de Producte"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantitat"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Eliminar un"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Comanda"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Lloc web"
diff --git a/i18n/cs.po b/i18n/cs.po
new file mode 100644
index 0000000..c118d5d
--- /dev/null
+++ b/i18n/cs.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Jiří Podhorecký, 2023
+# Wil Odoo, 2023
+# Jakub Smolka, 2023
+# Vojtech Smolka, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Vojtech Smolka, 2024\n"
+"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: cs\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Přidat do košíku"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Cena</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produkt</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Celkem:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Přidat do košíku"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Přidat jeden"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Přidat do košíku"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Dostupné možnosti:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Pokračovat v nákupu"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Možnost není k dispozici"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Pokračujte k pokladně"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produktový obrázek"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Množství"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Odebrat jeden"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Prodejní objednávka"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Webová stránka"
diff --git a/i18n/da.po b/i18n/da.po
new file mode 100644
index 0000000..1d601a6
--- /dev/null
+++ b/i18n/da.po
@@ -0,0 +1,115 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# lhmflexerp <lhm@flexerp.dk>, 2023
+# Martin Trigaux, 2023
+# Sanne Kristensen <sanne@vkdata.dk>, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Sanne Kristensen <sanne@vkdata.dk>, 2024\n"
+"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: da\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Tilføj til kurv"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Pris</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produkt</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Tilføj til kurv handling"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Tilføj en"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Tilføj til kurv"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Tilgængelige muligheder:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Fortsæt med at handle"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Lad brugeren bestemme (dialog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Valgmulighed ikke tilgængelig"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Fortsæt til checkout"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produktbillede"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Antal"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Fjern én"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Salgsordre"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Hjemmeside"
diff --git a/i18n/de.po b/i18n/de.po
new file mode 100644
index 0000000..6694996
--- /dev/null
+++ b/i18n/de.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Larissa Manderfeld, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Larissa Manderfeld, 2023\n"
+"Language-Team: German (https://app.transifex.com/odoo/teams/41243/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/>In den Warenkorb"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Preis</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produkt</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Gesamt:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Aktion „In den Warenkorb“"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "1 hinzufügen"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "In den Warenkorb"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Verfügbare Optionen:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Weiter einkaufen"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Den Benutzer entscheiden lassen (Dialog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Option nicht verfügbar"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Zur Kasse"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produktbild"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Menge"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "1 entfernen"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Verkaufsauftrag"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Website"
diff --git a/i18n/es.po b/i18n/es.po
new file mode 100644
index 0000000..58b1d7c
--- /dev/null
+++ b/i18n/es.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Larissa Manderfeld, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Larissa Manderfeld, 2024\n"
+"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Agregar al carrito"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Precio</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Producto</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Agregar al carrito"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Agregue uno"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Agregar al carrito"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opciones disponibles: "
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Siga comprando"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Dejar que el usuario decida (diálogo)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opción no disponible"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Proceder a la compra"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagen del producto"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Quitar uno"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Orden de venta"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Sitio web"
diff --git a/i18n/es_419.po b/i18n/es_419.po
new file mode 100644
index 0000000..d37eb21
--- /dev/null
+++ b/i18n/es_419.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Fernanda Alvarez, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Fernanda Alvarez, 2023\n"
+"Language-Team: Spanish (Latin America) (https://app.transifex.com/odoo/teams/41243/es_419/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_419\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Agregar al carrito"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Precio</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Producto</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Agregar al carrito"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Agregar uno"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Agregar al carrito"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opciones disponibles: "
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continuar comprando"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Permitir que el usuario decida (diálogo)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opción no disponible"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Proceder al pago"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagen del producto"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Eliminar uno"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Orden de venta"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Sitio web"
diff --git a/i18n/et.po b/i18n/et.po
new file mode 100644
index 0000000..6e56e51
--- /dev/null
+++ b/i18n/et.po
@@ -0,0 +1,118 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Leaanika Randmets, 2023
+# Marek Pontus, 2023
+# Egon Raamat <egon@avalah.ee>, 2023
+# Anna, 2023
+# Algo Kärp <algokarp@gmail.com>, 2023
+# Eneli Õigus <enelioigus@gmail.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Eneli Õigus <enelioigus@gmail.com>, 2023\n"
+"Language-Team: Estonian (https://app.transifex.com/odoo/teams/41243/et/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: et\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Lisa ostukorvi"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Hind</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Toode</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Kokku:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Lisa ostukorvi nupu toiming"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Lisage üks"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Lisa ostukorvi"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Lisavalikud:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Jätka ostlemist"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Lase kasutajal ise otsustada (dialoog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Valik pole saadaval"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Mine ostukorvi"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Toote pilt"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kogus"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Eemaldage üks"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Müügitellimus"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Veebileht"
diff --git a/i18n/fa.po b/i18n/fa.po
new file mode 100644
index 0000000..74b0ac3
--- /dev/null
+++ b/i18n/fa.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Mohsen Mohammadi <iammohsen.123@gmail.com>, 2023
+# Hamed Mohammadi <hamed@dehongi.com>, 2023
+# Martin Trigaux, 2023
+# Hanna Kheradroosta, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Hanna Kheradroosta, 2023\n"
+"Language-Team: Persian (https://app.transifex.com/odoo/teams/41243/fa/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fa\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> افزودن به سبد"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>جمع کل:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "افزودن یکی"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "افزودن به سبد"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "گزینه های موجود:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "ادامه خرید"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "پیشنهاد در دسترس نیست"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "تصویر محصول"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "تعداد"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "حذف یکی"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "سفارش فروش"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "تارنما"
diff --git a/i18n/fi.po b/i18n/fi.po
new file mode 100644
index 0000000..00a9d6b
--- /dev/null
+++ b/i18n/fi.po
@@ -0,0 +1,120 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Mikko Salmela <salmemik@gmail.com>, 2023
+# Svante Suominen <svante.suominen@web-veistamo.fi>, 2023
+# Ossi Mantylahti <ossi.mantylahti@obs-solutions.fi>, 2023
+# Tuomo Aura <tuomo.aura@web-veistamo.fi>, 2023
+# Martin Trigaux, 2023
+# Tuomas Lyyra <tuomas.lyyra@legenda.fi>, 2023
+# Kari Lindgren <kari.lindgren@emsystems.fi>, 2023
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2023\n"
+"Language-Team: Finnish (https://app.transifex.com/odoo/teams/41243/fi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Lisää tilaukselle"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Hinta</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Tuote</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Yhteensä:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Lisää ostoskoriin Toiminta"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Lisää yksi"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Lisää ostoskoriin"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Valittavissa olevat vaihtoehdot: "
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Palaa kauppaan"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Anna käyttäjän päättää (dialogi)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Vaihtoehtoa ei ole saatavana"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Jatka tilaamaan"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Tuotekuva"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Määrä"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Poista yksi"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Myyntitilaus"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Verkkosivu"
diff --git a/i18n/fr.po b/i18n/fr.po
new file mode 100644
index 0000000..044ea52
--- /dev/null
+++ b/i18n/fr.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Jolien De Paepe, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Jolien De Paepe, 2023\n"
+"Language-Team: French (https://app.transifex.com/odoo/teams/41243/fr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: fr\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Ajouter au panier"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Prix</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produit</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total :</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Action ajouter au panier"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Ajouter"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Ajouter au panier"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Options disponibles :"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continuer les achats"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Laisser l'utilisateur décider (dialogue)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Option non disponible"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Finaliser les achats"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Image du produit"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantité"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Supprimer"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Bon de commande"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Site Web"
diff --git a/i18n/he.po b/i18n/he.po
new file mode 100644
index 0000000..afb2758
--- /dev/null
+++ b/i18n/he.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Lilach Gilliam <lilach.gilliam@gmail.com>, 2023
+# NoaFarkash, 2023
+# Yihya Hugirat <hugirat@gmail.com>, 2023
+# ZVI BLONDER <ZVIBLONDER@gmail.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: ZVI BLONDER <ZVIBLONDER@gmail.com>, 2023\n"
+"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: he\n"
+"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> הוסף לעגלה"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">מחיר</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">מוצר</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>סה\"כ:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "הוסף אחד"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "הוסף לעגלה"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "אפשרויות זמינות:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "המשך בקנייה"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "אפשר למשתמש להחליט (דיאלוג)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "האפשרות אינה זמינה"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "התקדם לתשלום"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "תמונת מוצר"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "כמות"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "הסר אחד"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "הזמנת לקוח"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "אתר אינטרנט"
diff --git a/i18n/hr.po b/i18n/hr.po
new file mode 100644
index 0000000..3d99936
--- /dev/null
+++ b/i18n/hr.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+#
+# Translators:
+# Ivana Šimek <ivanasimek@gmail.com>, 2022
+# Martin Trigaux, 2022
+# Vladimir Olujić <olujic.vladimir@storm.hr>, 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~15.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-16 13:50+0000\n"
+"PO-Revision-Date: 2022-09-22 05:57+0000\n"
+"Last-Translator: Vladimir Olujić <olujic.vladimir@storm.hr>, 2022\n"
+"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n"
+"Language: hr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Quantity</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Dodaj u košaricu"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Prodajni nalog"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Web stranica"
diff --git a/i18n/hu.po b/i18n/hu.po
new file mode 100644
index 0000000..253e3d8
--- /dev/null
+++ b/i18n/hu.po
@@ -0,0 +1,119 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Kovács Tibor <kovika@gmail.com>, 2023
+# Szabolcs Rádi, 2023
+# Istvan <leki69@gmail.com>, 2023
+# krnkris, 2023
+# Ákos Nagy <akos.nagy@oregional.hu>, 2023
+# Gergő Kertész <gergo.kertesz@maxflow.hu>, 2023
+# Tamás Németh <ntomasz81@gmail.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Tamás Németh <ntomasz81@gmail.com>, 2023\n"
+"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Kosárba tesz"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Összesen:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Hozzáadás"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Kosárhoz ad"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Elérhető opciók:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Vásárlás folytatása"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Az opció nem elérhető"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Továbblépés a véglegesítéshez"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Termék képe"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Mennyiség"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Eltávolítás"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Megrendelések"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Honlap"
diff --git a/i18n/id.po b/i18n/id.po
new file mode 100644
index 0000000..9b140ed
--- /dev/null
+++ b/i18n/id.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Indonesian (https://app.transifex.com/odoo/teams/41243/id/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: id\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Tambahkan ke keranjang"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Harga</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produk</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Tindakan Tambah Ke Keranjang"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Tambahkan satu"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Tambahkan ke keranjang"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opsi yang Tersedia:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Lanjutkan Belanja"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Biarkan user menentukan (dialog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opsi tidak tersedia"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Lanjutkan ke Checkout"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Gambar Produk"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kuantitas"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Hapus satu"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Order Penjualan"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Website"
diff --git a/i18n/it.po b/i18n/it.po
new file mode 100644
index 0000000..8cd4012
--- /dev/null
+++ b/i18n/it.po
@@ -0,0 +1,115 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Marianna Ciofani, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Marianna Ciofani, 2023\n"
+"Language-Team: Italian (https://app.transifex.com/odoo/teams/41243/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: it\n"
+"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Aggiungi al carrello"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Prezzo</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Prodotto</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totale:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Azione aggiungi al carrello"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Aggiungi unità"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Aggiungi al carrello"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opzioni disponibili:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continua gli acquisti"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Lascia decidere l'utente (Finestra di dialogo)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opzione non disponibile"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Procedi al pagamento"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Immagine prodotto"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantità"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Rimuovi unità"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Ordine di vendita"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Sito web"
diff --git a/i18n/ja.po b/i18n/ja.po
new file mode 100644
index 0000000..fca2c33
--- /dev/null
+++ b/i18n/ja.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Ryoko Tsuda <ryoko@quartile.co>, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Ryoko Tsuda <ryoko@quartile.co>, 2024\n"
+"Language-Team: Japanese (https://app.transifex.com/odoo/teams/41243/ja/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ja\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> カートに入れる"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">価格</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">プロダクト</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>合計:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "カートに入れるアクション"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "一つを追加"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "カートに入れる"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "利用可能なオプション:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "買い物を続ける"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "ユーザが決める (ダイアログ)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "オプションは利用できません"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "チェックアウト"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "製品画像"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "数量"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "一つを削除"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "販売オーダ"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "ウェブサイト"
diff --git a/i18n/ko.po b/i18n/ko.po
new file mode 100644
index 0000000..235bc8f
--- /dev/null
+++ b/i18n/ko.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Korean (https://app.transifex.com/odoo/teams/41243/ko/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ko\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> 장바구니에 담기"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">가격</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">품목</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>합계 :</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "장바구니 추가 작업"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "하나 추가하기"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "장바구니에 담기"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "사용 가능한 선택 사항 :"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "쇼핑 계속하기"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "사용자가 결정하도록 허용(대화 상자)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "사용할 수 없는 선택 사항"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "결제 진행"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "품목 이미지"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "수량"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "하나만 제거하기"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "판매 주문"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "웹사이트"
diff --git a/i18n/lb.po b/i18n/lb.po
new file mode 100644
index 0000000..4931049
--- /dev/null
+++ b/i18n/lb.po
@@ -0,0 +1,120 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~12.4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-16 13:50+0000\n"
+"PO-Revision-Date: 2019-08-26 09:16+0000\n"
+"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
+"Language: lb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Quantity</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr ""
diff --git a/i18n/lt.po b/i18n/lt.po
new file mode 100644
index 0000000..9e7c8e4
--- /dev/null
+++ b/i18n/lt.po
@@ -0,0 +1,115 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Antanas Muliuolis <an.muliuolis@gmail.com>, 2023
+# Martin Trigaux, 2023
+# Linas Versada <linaskrisiukenas@gmail.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Linas Versada <linaskrisiukenas@gmail.com>, 2023\n"
+"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lt\n"
+"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/>Pridėti į krepšelį"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Suma:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Pridėti vieną"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Pridėti į krepšelį"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Galimi pasirinkimai:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Tęsti apsipirkimą"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Pasirinkimas negalimas"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Tęsti į apmokėjimą"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produkto paveikslėlis"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kiekis"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Pašalinti vieną"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Pardavimo užsakymas"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Svetainė"
diff --git a/i18n/lv.po b/i18n/lv.po
new file mode 100644
index 0000000..7ea9c42
--- /dev/null
+++ b/i18n/lv.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Will Sensors, 2023
+# Arnis Putniņš <arnis@allegro.lv>, 2023
+# Martin Trigaux, 2023
+# Armīns Jeltajevs <armins.jeltajevs@gmail.com>, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Armīns Jeltajevs <armins.jeltajevs@gmail.com>, 2024\n"
+"Language-Team: Latvian (https://app.transifex.com/odoo/teams/41243/lv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lv\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Kopā:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Pievienot grozam"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produkta attēls"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Daudzums"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Pasūtījums"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Mājas lapa"
diff --git a/i18n/mn.po b/i18n/mn.po
new file mode 100644
index 0000000..75e7cd3
--- /dev/null
+++ b/i18n/mn.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+#
+# Translators:
+# nurbakhit nurka <nurbakhit@bumanit.mn>, 2022
+# Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2022
+# Martin Trigaux, 2022
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~15.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-16 13:50+0000\n"
+"PO-Revision-Date: 2022-09-22 05:57+0000\n"
+"Last-Translator: Martin Trigaux, 2022\n"
+"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n"
+"Language: mn\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Quantity</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Сагсанд нэмэх"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Худалдан авалтаа үргэлжлүүлэх"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Худалдан авалтаа дуусгах"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Борлуулалтын захиалга"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Вэбсайт"
diff --git a/i18n/nb.po b/i18n/nb.po
new file mode 100644
index 0000000..ed05fcc
--- /dev/null
+++ b/i18n/nb.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2022
+# Marius Stedjan <marius@stedjan.com>, 2022
+# Henning Fyllingsnes, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~15.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-16 13:50+0000\n"
+"PO-Revision-Date: 2022-09-22 05:57+0000\n"
+"Last-Translator: Henning Fyllingsnes, 2023\n"
+"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n"
+"Language: nb\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Quantity</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Legg i handlekurv funksjon"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Legg i handlekurv"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Fortsett å handle"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Fortsett til utsjekk"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Salgsordre"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Nettsted"
diff --git a/i18n/nl.po b/i18n/nl.po
new file mode 100644
index 0000000..61179ac
--- /dev/null
+++ b/i18n/nl.po
@@ -0,0 +1,115 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Dutch (https://app.transifex.com/odoo/teams/41243/nl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Toevoegen aan "
+"winkelmandje"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Prijs</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Product</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totaal:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Aan winkelmandje toevoegen actie"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Voeg één toe"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Toevoegen aan winkelmandje"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Beschikbare opties:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Verder gaan met winkelen"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Laat de gebruiker beslissen (dialoog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Optie niet beschikbaar"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Ga naar afrekenen"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Productafbeelding"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Verwijder één"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Verkooporder"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Website"
diff --git a/i18n/pl.po b/i18n/pl.po
new file mode 100644
index 0000000..50c611e
--- /dev/null
+++ b/i18n/pl.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pl\n"
+"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/>Dodaj do koszyka"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Cena</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produkt</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Suma:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Akcja dodaj do koszyka"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Dodaj jeden"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Dodaj do koszyka"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Dostępne Opcje:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Kontynuuj zakupy"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Pozwól zdecydować użytkownikowi (dialog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opcja niedostępna"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Kontynuuj aby sprawdzić"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Obraz produktu"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Ilość"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Usuń jeden"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Zamówienie sprzedaży"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Strona internetowa"
diff --git a/i18n/pt.po b/i18n/pt.po
new file mode 100644
index 0000000..04d81e5
--- /dev/null
+++ b/i18n/pt.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Reinaldo Ramos <reinaldo.ramos@arxi.pt>, 2023
+# a75f12d3d37ea5bf159c4b3e85eb30e7_0fa6927, 2023
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Adicionar ao carrinho"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Preço</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Adicionar um"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continuar a Comprar"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagem do Artigo"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantidade"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Remover um"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Ordem de Vendas"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Website"
diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po
new file mode 100644
index 0000000..4f5a8f9
--- /dev/null
+++ b/i18n/pt_BR.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Maitê Dietze, 2023
+# Layna Nascimento, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Layna Nascimento, 2023\n"
+"Language-Team: Portuguese (Brazil) (https://app.transifex.com/odoo/teams/41243/pt_BR/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: pt_BR\n"
+"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+"<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Adicionar no carrinho"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Preço</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Produto</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Ação de adicionar ao carrinho"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Adicionar um"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Adicionar ao carrinho"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opções disponíveis:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continuar as compras"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Deixar o usuário decidir (diálogo)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opção não disponível"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Checkout"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagem do produto"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantidade"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Remover um"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Pedido de venda"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Site"
diff --git a/i18n/ro.po b/i18n/ro.po
new file mode 100644
index 0000000..93dc7a4
--- /dev/null
+++ b/i18n/ro.po
@@ -0,0 +1,126 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+#
+# Translators:
+# Dorin Hongu <dhongu@gmail.com>, 2022
+# Martin Trigaux, 2022
+# Cozmin Candea <office@terrabit.ro>, 2023
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~15.3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-16 13:50+0000\n"
+"PO-Revision-Date: 2022-09-22 05:57+0000\n"
+"Last-Translator: Cozmin Candea <office@terrabit.ro>, 2023\n"
+"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Quantity</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Acțiune de adăugare în coș"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Adaugă în coș"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Continuați cumpărăturile"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Continuă către plată"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Comandă de vânzare"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Pagină web"
diff --git a/i18n/ru.po b/i18n/ru.po
new file mode 100644
index 0000000..eff1a7e
--- /dev/null
+++ b/i18n/ru.po
@@ -0,0 +1,116 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Martin Trigaux, 2023
+# Ivan Kropotkin <yelizariev@itpp.dev>, 2023
+# Константин Коровин <korovin74@gmail.com>, 2023
+# Wil Odoo, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2024\n"
+"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ru\n"
+"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Добавить в корзину"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Цена</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Продукт</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Общая:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Действие “В корзину”"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Добавить один"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Добавить в корзину"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "\\0"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Продолжить покупки"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Пусть пользователь сам решает (диалог)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Опция недоступна"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Перейти к оформлению заказа"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Изображение товара"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Количество"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Удалить один"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Заказ на продажу"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Сайт"
diff --git a/i18n/sk.po b/i18n/sk.po
new file mode 100644
index 0000000..c0e83b8
--- /dev/null
+++ b/i18n/sk.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sk\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/>Vlož do košíka"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Celkom:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Pridaj jeden"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Pridať do košíka"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Dostupné možnosti:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Pokračovať v nákupe"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Možnosť nie je k dispozícii"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Pokračujte k pokladni"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Obrázok produktu"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Množstvo"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Odstráň jednu"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Objednávka "
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Webstránka"
diff --git a/i18n/sl.po b/i18n/sl.po
new file mode 100644
index 0000000..14fa759
--- /dev/null
+++ b/i18n/sl.po
@@ -0,0 +1,118 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Jasmina Macur <jasmina@hbs.si>, 2023
+# Nejc G <nejc@luxim.si>, 2023
+# Tadej Lupšina <tadej@hbs.si>, 2023
+# matjaz k <matjaz@mentis.si>, 2023
+# Tomaž Jug <tomaz@editor.si>, 2023
+# Martin Trigaux, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Martin Trigaux, 2023\n"
+"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sl\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Dodaj v košarico"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Cena</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Izdelek</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Skupaj:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Akcija dodajanja v košarico"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Dodajte ga"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Dodaj v voziček"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Možnosti:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Nadaljuj z nakupovanjem"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Naj se uporabnik odloči (pojavno okno)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Možnost ni na voljo"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Zaključi nakup"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Slika izdelka"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Količina"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Odstrani ga"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Prodajni nalog"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Spletna stran"
diff --git a/i18n/sr.po b/i18n/sr.po
new file mode 100644
index 0000000..faa27ec
--- /dev/null
+++ b/i18n/sr.po
@@ -0,0 +1,115 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Milan Bojovic <mbojovic@outlook.com>, 2023
+# Dragan Vukosavljevic <dragan.vukosavljevic@gmail.com>, 2023
+# コフスタジオ, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: コフスタジオ, 2024\n"
+"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sr\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Dodaj u korpu"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Price</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Product</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Ukupno:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Dodaj u korpu akcija"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Dodaj jedan"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Dodaj u korpu"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Available Options:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Nastavite sa kupovinom"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Dozvoli korisniku da odluči (dijalog)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Option not available"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Nastavite sa poručivanjem"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Slika proizvoda"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Količina"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Ukloni jedan"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Porudžbenica"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Web stranica"
diff --git a/i18n/sv.po b/i18n/sv.po
new file mode 100644
index 0000000..90f10e4
--- /dev/null
+++ b/i18n/sv.po
@@ -0,0 +1,118 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Kim Asplund <kim.asplund@gmail.com>, 2023
+# Anders Wallenquist <anders.wallenquist@vertel.se>, 2023
+# Lasse L, 2023
+# Chrille Hedberg <hedberg.chrille@gmail.com>, 2023
+# Martin Trigaux, 2023
+# Claes-Johan Dahlin, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Claes-Johan Dahlin, 2024\n"
+"Language-Team: Swedish (https://app.transifex.com/odoo/teams/41243/sv/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: sv\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Lägg i varukorgen"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totalt:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Lägg till i varukorgen Händelse"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Lägg till en"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Lägg i varukorgen"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Tillgängliga alternativ:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Fortsätt handla"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Alternativ inte tillgängligt"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Fortsätt till betalning"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produkt Bild"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Antal"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Ta bort en"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Order"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Webbplats"
diff --git a/i18n/th.po b/i18n/th.po
new file mode 100644
index 0000000..ebfec7a
--- /dev/null
+++ b/i18n/th.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# Rasareeyar Lappiam, 2024
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Rasareeyar Lappiam, 2024\n"
+"Language-Team: Thai (https://app.transifex.com/odoo/teams/41243/th/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: th\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> เพิ่มในตะกร้า"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">ราคา</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">สินค้า</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>ทั้งหมด:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "การดำเนินการเพิ่มลงตะกร้า"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "เพิ่มหนึ่ง"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "เพิ่มในตะกร้า"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "ตัวเลือกที่มีอยู่:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "ช้อปปิ้งต่อ"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "ให้ผู้ใช้ตัดสินใจ (โต้ตอบ)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "ไม่มีตัวเลือก"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "ดำเนินการชำระเงิน"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "รูปภาพสินค้า"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "ปริมาณ"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "นำออกหนึ่ง"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "คำสั่งขาย"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "เว็บไซต์"
diff --git a/i18n/tr.po b/i18n/tr.po
new file mode 100644
index 0000000..b5d82ee
--- /dev/null
+++ b/i18n/tr.po
@@ -0,0 +1,120 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Mehmet Demirel <mdemirell@gmail.com>, 2023
+# Halil, 2023
+# Ugur Yilmaz <ugurlu2001@hotmail.com>, 2023
+# Tugay Hatıl <tugayh@projetgrup.com>, 2023
+# abc Def <hdogan1974@gmail.com>, 2023
+# Ediz Duman <neps1192@gmail.com>, 2023
+# Martin Trigaux, 2023
+# Murat Kaplan <muratk@projetgrup.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Murat Kaplan <muratk@projetgrup.com>, 2023\n"
+"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: tr\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Sepete ekle"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Fiyat</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Ürün</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Toplam:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Sepete Ekle Eylemi"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Ekle"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Sepete Ekle"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Mevcut Seçenekler:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Alışverişi sürdür"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Kullanıcının karar vermesine izin verin (iletişim kutusu)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Seçenek mevcut değil"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Kasa ödemesini Takip et"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Ürün Görseli"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Miktar"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Birini kaldır"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Satış Siparişi"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Websitesi"
diff --git a/i18n/uk.po b/i18n/uk.po
new file mode 100644
index 0000000..dd95578
--- /dev/null
+++ b/i18n/uk.po
@@ -0,0 +1,115 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Martin Trigaux, 2023
+# Alina Lisnenko <alina.lisnenko@erp.co.ua>, 2023
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: uk\n"
+"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Додати до кошика"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Ціна</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Товар</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Всього:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Дія додати в кошик"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Додати один"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Додати до кошика"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Доступні функції:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Продовжити покупки"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Дозвольте користувачу обирати (діалог)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Функція не доступна"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Перейти до замовлення"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Зображення товару"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Кількість"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Вилучити один"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Замовлення на продаж"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Веб-сайт"
diff --git a/i18n/vi.po b/i18n/vi.po
new file mode 100644
index 0000000..14a7b7e
--- /dev/null
+++ b/i18n/vi.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: vi\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/>Thêm vào giỏ hàng"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">Giá</span> "
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">Sản phẩm</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Tổng:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "Hành động Thêm vào giỏ hàng"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "Thêm"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "Thêm vào giỏ hàng"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Tuỳ chọn khả dụng:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "Tiếp tục mua hàng"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "Để người dùng quyết định (hộp thoại)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Tùy chọn không khả dụng"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "Tiến hành thanh toán"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Hình ảnh sản phẩm"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Số lượng"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "Xóa một"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "Đơn bán hàng"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "Trang web"
diff --git a/i18n/website_sale_product_configurator.pot b/i18n/website_sale_product_configurator.pot
new file mode 100644
index 0000000..96b3aee
--- /dev/null
+++ b/i18n/website_sale_product_configurator.pot
@@ -0,0 +1,109 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 21:56+0000\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr ""
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr ""
diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po
new file mode 100644
index 0000000..d163f78
--- /dev/null
+++ b/i18n/zh_CN.po
@@ -0,0 +1,114 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023\n"
+"Language-Team: Chinese (China) (https://app.transifex.com/odoo/teams/41243/zh_CN/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_CN\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/>添加到购物车"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">单价</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">产品</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>总计:</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "添加到购物车动作"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "添加一行"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "加入购物车"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "有效选项:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "继续购物"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "让用户决定(对话框)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "选项无效"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "结算"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "产品图像"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "数量"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "移除一行"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "销售订单"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "网站"
diff --git a/i18n/zh_TW.po b/i18n/zh_TW.po
new file mode 100644
index 0000000..9bafac1
--- /dev/null
+++ b/i18n/zh_TW.po
@@ -0,0 +1,113 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# 	* website_sale_product_configurator
+# 
+# Translators:
+# Wil Odoo, 2023
+# 
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-10-26 21:56+0000\n"
+"PO-Revision-Date: 2023-10-26 23:09+0000\n"
+"Last-Translator: Wil Odoo, 2023\n"
+"Language-Team: Chinese (Taiwan) (https://app.transifex.com/odoo/teams/41243/zh_TW/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: zh_TW\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> 加入購物車"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Price</span>"
+msgstr "<span class=\"label\">價格</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<span class=\"label\">Product</span>"
+msgstr "<span class=\"label\">產品</span>"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>總計</strong>"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields,field_description:website_sale_product_configurator.field_website__add_to_cart_action
+msgid "Add To Cart Action"
+msgstr "「加入購物車」操作"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Add one"
+msgstr "添加一行"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Add to cart"
+msgstr "加入購物車"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "可用選項:"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Continue Shopping"
+msgstr "繼續購物"
+
+#. module: website_sale_product_configurator
+#: model:ir.model.fields.selection,name:website_sale_product_configurator.selection__website__add_to_cart_action__force_dialog
+msgid "Let the user decide (dialog)"
+msgstr "讓用戶決定(對話框)"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "選項不可用"
+
+#. module: website_sale_product_configurator
+#. odoo-javascript
+#: code:addons/website_sale_product_configurator/static/src/js/website_sale_options.js:0
+#, python-format
+msgid "Proceed to Checkout"
+msgstr "前往結賬"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "產品圖片"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "數量"
+
+#. module: website_sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:website_sale_product_configurator.product_quantity_config
+msgid "Remove one"
+msgstr "刪除一行"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_sale_order
+msgid "Sales Order"
+msgstr "銷售訂單"
+
+#. module: website_sale_product_configurator
+#: model:ir.model,name:website_sale_product_configurator.model_website
+msgid "Website"
+msgstr "網站"
diff --git a/models/__init__.py b/models/__init__.py
new file mode 100644
index 0000000..4929acd
--- /dev/null
+++ b/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import sale_order
+from . import website
diff --git a/models/sale_order.py b/models/sale_order.py
new file mode 100644
index 0000000..9b853e8
--- /dev/null
+++ b/models/sale_order.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models
+
+
+class SaleOrder(models.Model):
+    _inherit = "sale.order"
+
+    def _cart_find_product_line(
+        self, product_id=None, line_id=None,
+        linked_line_id=False, optional_product_ids=None, **kwargs
+    ):
+        lines = super()._cart_find_product_line(product_id, line_id, **kwargs)
+        if line_id:  # in this case we get the exact line we want, so filtering below would be wrong
+            return lines
+
+        lines = lines.filtered(lambda line: line.linked_line_id.id == linked_line_id)
+        if optional_product_ids:
+            # only match the lines with the same chosen optional products on the existing lines
+            lines = lines.filtered(lambda line: optional_product_ids == set(line.option_line_ids.product_id.id))
+        else:
+            lines = lines.filtered(lambda line: not line.option_line_ids)
+
+        return lines
diff --git a/models/website.py b/models/website.py
new file mode 100644
index 0000000..8a8340b
--- /dev/null
+++ b/models/website.py
@@ -0,0 +1,12 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class Website(models.Model):
+    _inherit = 'website'
+
+    add_to_cart_action = fields.Selection(
+        selection_add=[('force_dialog', "Let the user decide (dialog)")],
+        ondelete={'force_dialog': 'set default'})
diff --git a/static/src/js/sale_product_configurator_modal.js b/static/src/js/sale_product_configurator_modal.js
new file mode 100644
index 0000000..a1cbea7
--- /dev/null
+++ b/static/src/js/sale_product_configurator_modal.js
@@ -0,0 +1,540 @@
+/** @odoo-module */
+
+import Dialog from '@web/legacy/js/core/dialog';
+import VariantMixin from '@website_sale/js/sale_variant_mixin';
+import { uniqueId } from '@web/core/utils/functions';
+import { jsonrpc } from '@web/core/network/rpc_service';
+
+export const OptionalProductsModal = Dialog.extend(VariantMixin, {
+    events:  Object.assign({}, Dialog.prototype.events, VariantMixin.events, {
+        'click a.js_add, a.js_remove': '_onAddOrRemoveOption',
+        'click button.js_add_cart_json': 'onClickAddCartJSON',
+        'change .in_cart input.js_quantity': '_onChangeQuantity',
+        'change .js_raw_price': '_computePriceTotal'
+    }),
+    /**
+     * Initializes the optional products modal
+     *
+     * @override
+     * @param {$.Element} parent The parent container
+     * @param {Object} params
+     * @param {integer} params.pricelistId
+     * @param {boolean} params.isWebsite If we're on a web shop page, we need some
+     *   custom behavior
+     * @param {string} params.okButtonText The text to apply on the "ok" button, typically
+     *   "Add" for the sale order and "Proceed to checkout" on the web shop
+     * @param {string} params.cancelButtonText same as "params.okButtonText" but
+     *   for the cancel button
+     * @param {integer} params.previousModalHeight used to configure a min height on the modal-content.
+     *   This parameter is provided by the product configurator to "cover" its modal by making
+     *   this one big enough. This way the user can't see multiple buttons (which can be confusing).
+     * @param {Object} params.rootProduct The root product of the optional products window
+     * @param {integer} params.rootProduct.product_id
+     * @param {integer} params.rootProduct.quantity
+     * @param {Array} params.rootProduct.variant_values
+     * @param {Array} params.rootProduct.product_custom_attribute_values
+     * @param {Array} params.rootProduct.no_variant_attribute_values
+     */
+    init: function (parent, params) {
+        var self = this;
+
+        var options = Object.assign({
+            size: 'large',
+            buttons: [{
+                text: params.okButtonText,
+                click: this._onConfirmButtonClick,
+                // the o_sale_product_configurator_edit class is used for tours.
+                classes: 'btn-primary o_sale_product_configurator_edit'
+            }, {
+                text: params.cancelButtonText,
+                click: this._onCancelButtonClick
+            }],
+            technical: !params.isWebsite,
+        }, params || {});
+
+        this._super(parent, options);
+
+        this.isWebsite = params.isWebsite;
+        this.forceDialog = params.forceDialog;
+
+        this.dialogClass = 'oe_advanced_configurator_modal' + (params.isWebsite ? ' oe_website_sale' : '');
+        this.context = params.context;
+        this.rootProduct = params.rootProduct;
+        this.container = parent;
+        this.pricelistId = params.pricelistId;
+        this.previousModalHeight = params.previousModalHeight;
+        this.mode = params.mode;
+        this.dialogClass = 'oe_advanced_configurator_modal';
+        this._productImageField = 'image_128';
+
+        this._opened.then(function () {
+            if (self.previousModalHeight) {
+                self.$el.closest('.modal-content').css('min-height', self.previousModalHeight + 'px');
+            }
+        });
+
+        this.rpc = this.bindService("rpc");
+    },
+     /**
+     * @override
+     */
+    willStart: function () {
+        var self = this;
+
+        var getModalContent = jsonrpc("/sale_product_configurator/show_advanced_configurator", {
+            mode: self.mode,
+            product_id: self.rootProduct.product_id,
+            variant_values: self.rootProduct.variant_values,
+            product_custom_attribute_values: self.rootProduct.product_custom_attribute_values,
+            pricelist_id: self.pricelistId || false,
+            add_qty: self.rootProduct.quantity,
+            force_dialog: self.forceDialog,
+            no_attribute: self.rootProduct.no_variant_attribute_values,
+            custom_attribute: self.rootProduct.product_custom_attribute_values,
+            context: Object.assign({'quantity': self.rootProduct.quantity}, this.context),
+        })
+        .then(function (modalContent) {
+            if (modalContent) {
+                var $modalContent = $(modalContent);
+                $modalContent = self._postProcessContent($modalContent);
+                self.$content = $modalContent;
+            } else {
+                self.trigger('options_empty');
+                self.preventOpening = true;
+            }
+        });
+
+        var parentInit = self._super.apply(self, arguments);
+        return Promise.all([getModalContent, parentInit]);
+    },
+
+    /**
+     * This is overridden to append the modal to the provided container (see init("parent")).
+     * We need this to have the modal contained in the web shop product form.
+     * The additional products data will then be contained in the form and sent on submit.
+     *
+     * @override
+     */
+    open: function (options) {
+        $('.tooltip').remove(); // remove open tooltip if any to prevent them staying when modal is opened
+
+        var self = this;
+        this.appendTo($('<div/>')).then(function () {
+            if (!self.preventOpening) {
+                self.$modal.find(".modal-body").replaceWith(self.$el);
+                self.$modal.attr('open', true);
+                self.$modal.appendTo(self.container);
+                const modal = new Modal(self.$modal[0], {
+                    focus: true,
+                });
+                modal.show();
+                self._openedResolver();
+            }
+        });
+        if (options && options.shouldFocusButtons) {
+            self._onFocusControlButton();
+        }
+
+        return self;
+    },
+    /**
+     * Will update quantity input to synchronize with previous window
+     *
+     * @override
+     */
+    start: function () {
+        var def = this._super.apply(this, arguments);
+        var self = this;
+
+        this.$el.find('input[name="add_qty"]').val(this.rootProduct.quantity);
+
+        // set a unique id to each row for options hierarchy
+        var $products = this.$el.find('tr.js_product').toArray();
+        $products.forEach((el) => {
+            var $el = $(el);
+            var uniqueId = self._getUniqueId(el);
+
+            var productId = parseInt($el.find('input.product_id').val(), 10);
+            if (productId === self.rootProduct.product_id) {
+                self.rootProduct.unique_id = uniqueId;
+            } else {
+                el.dataset.parentUniqueId = self.rootProduct.unique_id;
+            }
+        });
+
+        return def.then(function () {
+            // This has to be triggered to compute the "out of stock" feature
+            self._opened.then(function () {
+                self.triggerVariantChange(self.$el);
+            });
+        });
+    },
+
+    //--------------------------------------------------------------------------
+    // Public
+    //--------------------------------------------------------------------------
+
+    /**
+     * Returns the list of selected products.
+     * The root product is added on top of the list.
+     *
+     * @returns {Array} products
+     *   {integer} product_id
+     *   {integer} quantity
+     *   {Array} product_custom_variant_values
+     *   {Array} no_variant_attribute_values
+     * @public
+     */
+    getAndCreateSelectedProducts: async function () {
+        var self = this;
+        const products = [];
+        let productCustomVariantValues;
+        let noVariantAttributeValues;
+        for (const product of self.$modal.find('.js_product.in_cart')) {
+            var $item = $(product);
+            var quantity = parseFloat($item.find('input[name="add_qty"]').val().replace(',', '.') || 1);
+            var parentUniqueId = product.dataset.parentUniqueId;
+            var uniqueId = product.dataset.uniqueId;
+            productCustomVariantValues = $item.find('.custom-attribute-info').data("attribute-value") || self.getCustomVariantValues($item);
+            noVariantAttributeValues = $item.find('.no-attribute-info').data("attribute-value") || self.getNoVariantAttributeValues($item);
+
+            const productID = await self.selectOrCreateProduct(
+                $item,
+                parseInt($item.find('input.product_id').val(), 10),
+                parseInt($item.find('input.product_template_id').val(), 10),
+                true
+            );
+            products.push({
+                'product_id': productID,
+                'product_template_id': parseInt($item.find('input.product_template_id').val(), 10),
+                'quantity': quantity,
+                'parent_unique_id': parentUniqueId,
+                'unique_id': uniqueId,
+                'product_custom_attribute_values': productCustomVariantValues,
+                'no_variant_attribute_values': noVariantAttributeValues
+            });
+        }
+        return products;
+    },
+
+    // ------------------------------------------
+    // Private
+    // ------------------------------------------
+
+    /**
+     * Adds the product image and updates the product description
+     * based on attribute values that are either "no variant" or "custom".
+     *
+     * @private
+     */
+    _postProcessContent: function ($modalContent) {
+        var productId = this.rootProduct.product_id;
+        $modalContent
+            .find('img:first')
+            .attr("src", "/web/image/product.product/" + productId + "/image_128");
+
+        if (this.rootProduct &&
+                (this.rootProduct.product_custom_attribute_values ||
+                 this.rootProduct.no_variant_attribute_values)) {
+            var $productDescription = $modalContent
+                .find('.main_product')
+                .find('td.td-product_name div.text-muted.small > div:first');
+            var $updatedDescription = $('<div/>');
+            $updatedDescription.append($('<p>', {
+                text: $productDescription.text()
+            }));
+            $.each(this.rootProduct.product_custom_attribute_values, function () {
+                if (this.custom_value) {
+                    const $customInput = $modalContent
+                        .find(".main_product [data-is_custom='True']")
+                        .closest(`[data-value_id='${this.custom_product_template_attribute_value_id.res_id}']`);
+                    $customInput.attr('previous_custom_value', this.custom_value);
+                    VariantMixin.handleCustomValues($customInput);
+                }
+            });
+
+            $.each(this.rootProduct.no_variant_attribute_values, function () {
+                if (this.is_custom !== 'True') {
+                    var $currentDescription = $updatedDescription.find(`div[name=ptal-${this.id}]`);
+                    if ($currentDescription?.length > 0) { // one row per multicheckbox
+                        $currentDescription.text($currentDescription.text() + ', ' + this.attribute_value_name);
+                    } else {
+                        $updatedDescription.append($('<div>', {
+                            text: this.attribute_name + ': ' + this.attribute_value_name,
+                            name: `ptal-${this.id}`,
+                        }));
+                    }
+                }
+            });
+
+            $productDescription.replaceWith($updatedDescription);
+        }
+
+        return $modalContent;
+    },
+
+    /**
+     * @private
+     */
+    _onConfirmButtonClick: function () {
+        this.trigger('confirm');
+        this.close();
+    },
+
+    /**
+     * @private
+     */
+    _onCancelButtonClick: function () {
+        this.trigger('back');
+        this.close();
+    },
+
+    /**
+     * Will add/remove the option, that includes:
+     * - Moving it to the correct DOM section
+     *   and possibly under its parent product
+     * - Hiding attribute values selection and showing the quantity
+     * - Creating the product if it's in "dynamic" mode (see product_attribute.create_variant)
+     * - Updating the description based on custom/no_create attribute values
+     * - Removing optional products if parent product is removed
+     * - Computing the total price
+     *
+     * @private
+     * @param {MouseEvent} ev
+     */
+    _onAddOrRemoveOption: function (ev) {
+        ev.preventDefault();
+        var self = this;
+        var $target = $(ev.currentTarget);
+        var $modal = $target.parents('.oe_advanced_configurator_modal');
+        var $parent = $target.parents('.js_product:first');
+        $parent.find("a.js_add, span.js_remove").toggleClass('d-none');
+        $parent.find(".js_remove");
+
+        var productTemplateId = $parent.find(".product_template_id").val();
+        if ($target.hasClass('js_add')) {
+            self._onAddOption($modal, $parent, productTemplateId);
+        } else {
+            self._onRemoveOption($modal, $parent);
+        }
+
+        self._computePriceTotal();
+    },
+
+    /**
+     * @private
+     * @see _onAddOrRemoveOption
+     * @param {$.Element} $modal
+     * @param {$.Element} $parent
+     * @param {integer} productTemplateId
+     */
+    _onAddOption: function ($modal, $parent, productTemplateId) {
+        var self = this;
+        var $selectOptionsText = $modal.find('.o_select_options');
+
+        var parentUniqueId = $parent[0].dataset.parentUniqueId;
+        var $optionParent = $modal.find('tr.js_product[data-unique-id="' + parentUniqueId + '"]');
+
+        // remove attribute values selection and update + show quantity input
+        $parent.find('.td-product_name').removeAttr("colspan");
+        $parent.find('.td-qty').removeClass('d-none');
+
+        var productCustomVariantValues = self.getCustomVariantValues($parent);
+        var noVariantAttributeValues = self.getNoVariantAttributeValues($parent);
+        if (productCustomVariantValues || noVariantAttributeValues) {
+            var $productDescription = $parent
+                .find('td.td-product_name div.float-start');
+
+            var $customAttributeValuesDescription = $('<div>', {
+                class: 'custom_attribute_values_description text-muted small'
+            });
+            if (productCustomVariantValues.length !== 0 || noVariantAttributeValues.length !== 0) {
+                $customAttributeValuesDescription.append($('<br/>'));
+            }
+
+            $.each(productCustomVariantValues, function (){
+                $customAttributeValuesDescription.append($('<div>', {
+                    text: this.attribute_value_name + ': ' + this.custom_value
+                }));
+            });
+
+            $.each(noVariantAttributeValues, function (){
+                if (this.is_custom !== 'True'){
+                    var $currentDescription = $customAttributeValuesDescription.find(`div[name=ptal-${this.id}]`);
+                    if ($currentDescription?.length > 0) { // one row per multicheckbox
+                        $currentDescription.text($currentDescription.text() + ', ' + this.attribute_value_name);
+                    } else {
+                        $customAttributeValuesDescription.append($('<div>', {
+                            text: this.attribute_name + ': ' + this.attribute_value_name,
+                            name: `ptal-${this.id}`,
+                        }));
+                    }
+                }
+            });
+
+            $productDescription.append($customAttributeValuesDescription);
+        }
+
+        // place it after its parent and its parent options
+        var $tmpOptionParent = $optionParent;
+        while ($tmpOptionParent.length) {
+            $optionParent = $tmpOptionParent;
+            $tmpOptionParent = $modal.find('tr.js_product.in_cart[data-parent-unique-id="' + $optionParent[0].dataset.uniqueId + '"]').last();
+        }
+        $optionParent.after($parent);
+        $parent.addClass('in_cart');
+
+        this.selectOrCreateProduct(
+            $parent,
+            $parent.find('.product_id').val(),
+            productTemplateId,
+            true
+        ).then(function (productId) {
+            $parent.find('.product_id').val(productId);
+
+            jsonrpc("/sale_product_configurator/optional_product_items", {
+                'product_id': productId,
+                'pricelist_id': self.pricelistId || false,
+            }).then(function (addedItem) {
+                var $addedItem = $(addedItem);
+                $modal.find('tr:last').after($addedItem);
+
+                self.$el.find('input[name="add_qty"]').trigger('change');
+                self.triggerVariantChange($addedItem);
+
+                // add a unique id to the new products
+                var parentUniqueId = $parent[0].dataset.uniqueId;
+                var parentQty = $parent.find('input[name="add_qty"]').val();
+                $addedItem.filter('.js_product').each(function () {
+                    var $el = $(this);
+                    var uniqueId = self._getUniqueId(this);
+                    this.dataset.uniqueId = uniqueId;
+                    this.dataset.parentUniqueId = parentUniqueId;
+                    $el.find('input[name="add_qty"]').val(parentQty);
+                });
+
+                if ($selectOptionsText.nextAll('.js_product').length === 0) {
+                    // no more optional products to select -> hide the header
+                    $selectOptionsText.hide();
+                }
+            });
+        });
+    },
+
+    /**
+     * @private
+     * @see _onAddOrRemoveOption
+     * @param {$.Element} $modal
+     * @param {$.Element} $parent
+     */
+    _onRemoveOption: function ($modal, $parent) {
+        // restore attribute values selection
+        var uniqueId = $parent[0].dataset.parentUniqueId;
+        var qty = $modal.find('tr.js_product.in_cart[data-unique-id="' + uniqueId + '"]').find('input[name="add_qty"]').val();
+        $parent.removeClass('in_cart');
+        $parent.find('.td-product_name').attr("colspan", 2);
+        $parent.find('.td-qty').addClass('d-none');
+        $parent.find('input[name="add_qty"]').val(qty);
+        $parent.find('.custom_attribute_values_description').remove();
+
+        $modal.find('.o_select_options').show();
+
+        var productUniqueId = $parent[0].dataset.uniqueId;
+        this._removeOptionOption($modal, productUniqueId);
+
+        $modal.find('tr:last').after($parent);
+    },
+
+    /**
+     * If the removed product had optional products, remove them as well
+     *
+     * @private
+     * @param {$.Element} $modal
+     * @param {integer} optionUniqueId The removed optional product id
+     */
+    _removeOptionOption: function ($modal, optionUniqueId) {
+        var self = this;
+        $modal.find('tr.js_product[data-parent-unique-id="' + optionUniqueId + '"]').each(function () {
+            var uniqueId = this.dataset.uniqueId;
+            $(this).remove();
+            self._removeOptionOption($modal, uniqueId);
+        });
+    },
+    /**
+     * @override
+     */
+    _onChangeCombination: function (ev, $parent, combination) {
+        $parent
+            .find('.td-product_name .product-name')
+            .first()
+            .text(combination.display_name);
+
+        VariantMixin._onChangeCombination.apply(this, arguments);
+
+        this._computePriceTotal();
+    },
+    /**
+     * Update price total when the quantity of a product is changed
+     *
+     * @private
+     * @param {MouseEvent} ev
+     */
+    _onChangeQuantity: function (ev) {
+        var $product = $(ev.target.closest('tr.js_product'));
+        var qty = parseFloat($(ev.currentTarget).val());
+
+        var uniqueId = $product[0].dataset.uniqueId;
+        this.$el.find('tr.js_product:not(.in_cart)[data-parent-unique-id="' + uniqueId + '"] input[name="add_qty"]').each(function () {
+            $(this).val(qty);
+        });
+
+        if (this._triggerPriceUpdateOnChangeQuantity()) {
+            this.onChangeAddQuantity(ev);
+        }
+        if ($product.hasClass('main_product')) {
+            this.rootProduct.quantity = qty;
+        }
+        this.trigger('update_quantity', this.rootProduct.quantity);
+        this._computePriceTotal();
+    },
+
+    /**
+     * When a product is added or when the quantity is changed,
+     * we need to refresh the total price row
+     */
+    _computePriceTotal: function () {
+        if (this.$modal.find('.js_price_total').length) {
+            var price = 0;
+            this.$modal.find('.js_product.in_cart').each(function () {
+                var quantity = parseFloat($(this).find('input[name="add_qty"]').first().val().replace(',', '.') || 1);
+                price += parseFloat($(this).find('.js_raw_price').html()) * quantity;
+            });
+
+            this.$modal.find('.js_price_total .oe_currency_value').text(
+                this._priceToStr(parseFloat(price))
+            );
+        }
+    },
+
+    /**
+     * Extension point for website_sale
+     *
+     * @private
+     */
+    _triggerPriceUpdateOnChangeQuantity: function () {
+        return !this.isWebsite;
+    },
+    /**
+     * Returns a unique id for `$el`.
+     *
+     * @private
+     * @param {Element} el
+     * @returns {integer}
+     */
+    _getUniqueId: function (el) {
+        if (!el.dataset.uniqueId) {
+            el.dataset.uniqueId = parseInt(uniqueId(), 10);
+        }
+        return el.dataset.uniqueId;
+    },
+});
diff --git a/static/src/js/website_sale_options.js b/static/src/js/website_sale_options.js
new file mode 100644
index 0000000..f347732
--- /dev/null
+++ b/static/src/js/website_sale_options.js
@@ -0,0 +1,124 @@
+/** @odoo-module **/
+
+import publicWidget from "@web/legacy/js/public/public_widget";
+import wSaleUtils from "@website_sale/js/website_sale_utils";
+import { OptionalProductsModal } from "@website_sale_product_configurator/js/sale_product_configurator_modal";
+import "@website_sale/js/website_sale";
+import { _t } from "@web/core/l10n/translation";
+
+publicWidget.registry.WebsiteSale.include({
+
+    //--------------------------------------------------------------------------
+    // Private
+    //--------------------------------------------------------------------------
+
+    _onProductReady: function () {
+        if (this.isBuyNow) {
+            return this._submitForm();
+        }
+        this.optionalProductsModal = new OptionalProductsModal(this.$form, {
+            rootProduct: this.rootProduct,
+            isWebsite: true,
+            okButtonText: _t('Proceed to Checkout'),
+            cancelButtonText: _t('Continue Shopping'),
+            title: _t('Add to cart'),
+            context: this._getContext(),
+            forceDialog: this.forceDialog,
+        }).open();
+
+        this.optionalProductsModal.on('options_empty', null, this._submitForm.bind(this));
+        this.optionalProductsModal.on('update_quantity', null, this._onOptionsUpdateQuantity.bind(this));
+        this.optionalProductsModal.on('confirm', null, this._onModalSubmit.bind(this, true));
+        this.optionalProductsModal.on('back', null, this._onModalSubmit.bind(this, false));
+
+        return this.optionalProductsModal.opened();
+    },
+    /**
+     * Overridden to resolve _opened promise on modal
+     * when stayOnPageOption is activated.
+     *
+     * @override
+     */
+    _submitForm() {
+        var ret = this._super(...arguments);
+        if (this.optionalProductsModal && this.stayOnPageOption) {
+            ret.then(()=>{
+                this.optionalProductsModal._openedResolver()
+            });
+        }
+        return ret;
+    },
+    /**
+     * Update web shop base form quantity
+     * when quantity is updated in the optional products window
+     *
+     * @private
+     * @param {integer} quantity
+     */
+    _onOptionsUpdateQuantity: function (quantity) {
+        var $qtyInput = this.$form
+            .find('.js_main_product input[name="add_qty"]')
+            .first();
+
+        if ($qtyInput.length) {
+            $qtyInput.val(quantity).trigger('change');
+        } else {
+            // This handles the case when the "Select Quantity" customize show
+            // is disabled, and therefore the above selector does not find an
+            // element.
+            // To avoid duplicating all RPC, only trigger the variant change if
+            // it is not already done from the above trigger.
+            this.optionalProductsModal.triggerVariantChange(this.optionalProductsModal.$el);
+        }
+    },
+
+    /**
+     * Submits the form with additional parameters
+     * - lang
+     * - product_custom_attribute_values: The products custom variant values
+     *
+     * @private
+     * @param {Boolean} goToShop Triggers a page refresh to the url "shop/cart"
+     */
+    _onModalSubmit: function (goToShop) {
+        const mainProduct = this.$('.js_product.in_cart.main_product').children('.product_id');
+        const productTrackingInfo = mainProduct.data('product-tracking-info');
+        if (productTrackingInfo) {
+            const currency = productTrackingInfo['currency'];
+            const productsTrackingInfo = [];
+            this.$('.js_product.in_cart').each((i, el) => {
+                productsTrackingInfo.push({
+                    'item_id': el.getElementsByClassName('product_id')[0].value,
+                    'item_name': el.getElementsByClassName('product_display_name')[0].textContent,
+                    'quantity': el.getElementsByClassName('js_quantity')[0].value,
+                    'currency': currency,
+                    'price': el.getElementsByClassName('oe_price')[0].getElementsByClassName('oe_currency_value')[0].textContent,
+                });
+            });
+            if (productsTrackingInfo) {
+                this.$el.trigger('add_to_cart_event', productsTrackingInfo);
+            }
+        }
+
+        const callService = this.call.bind(this)
+        this.optionalProductsModal.getAndCreateSelectedProducts()
+            .then((products) => {
+                const productAndOptions = JSON.stringify(products);
+                this.rpc('/shop/cart/update_option', {
+                    product_and_options: productAndOptions,
+                    ...this._getOptionalCombinationInfoParam(),
+                }).then(function (values) {
+                    if (goToShop) {
+                        window.location.pathname = "/shop/cart";
+                    } else {
+                        wSaleUtils.updateCartNavBar(values);
+                        wSaleUtils.showCartNotification(callService, values.notification_info);
+                    }
+                }).then(() => {
+                    this._getCombinationInfo($.Event('click', {target: $("#add_to_cart")}));
+                });
+            });
+    },
+});
+
+export default publicWidget.registry.WebsiteSaleOptions;
diff --git a/static/src/scss/website_sale_options.scss b/static/src/scss/website_sale_options.scss
new file mode 100644
index 0000000..bc88ece
--- /dev/null
+++ b/static/src/scss/website_sale_options.scss
@@ -0,0 +1,15 @@
+.css_not_available.js_product {
+    .product_price {
+        display: none !important;
+    }
+}
+
+div#modal_optional_products table tr td {
+    border: 0;
+}
+
+@include media-breakpoint-down(md) {
+    div#modal_optional_products .td-qty {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/static/tests/tours/website_sale_buy.js b/static/tests/tours/website_sale_buy.js
new file mode 100644
index 0000000..f1aedd5
--- /dev/null
+++ b/static/tests/tours/website_sale_buy.js
@@ -0,0 +1,20 @@
+/** @odoo-module **/
+/**
+ * Add custom steps to handle the optional products modal introduced
+ * by the product configurator module.
+ */
+import { registry } from "@web/core/registry";
+import { patch } from "@web/core/utils/patch";
+import "@website_sale/../tests/tours/website_sale_buy";
+
+patch(registry.category("web_tour.tours").get("shop_buy_product"), {
+    steps() {
+        const originalSteps = super.steps();
+        const addCartStepIndex = originalSteps.findIndex((step) => step.id === "add_cart_step");
+        originalSteps.splice(addCartStepIndex + 1, 1, {
+            content: "click in modal on 'Proceed to checkout' button",
+            trigger: 'button:contains("Proceed to Checkout")',
+        });
+        return originalSteps;
+    },
+});
diff --git a/static/tests/tours/website_sale_preconfigured_variant_price.js b/static/tests/tours/website_sale_preconfigured_variant_price.js
new file mode 100644
index 0000000..136666d
--- /dev/null
+++ b/static/tests/tours/website_sale_preconfigured_variant_price.js
@@ -0,0 +1,19 @@
+/** @odoo-module **/
+
+import { registry } from "@web/core/registry";
+
+registry.category("web_tour.tours").add('website_sale_product_configurator_optional_products_tour', {
+    test: true,
+    steps: () => [{
+    name: 'Click Aluminium Option',
+    trigger: 'ul.js_add_cart_variants span:contains("Aluminium")',
+    extra_trigger: 'ul.js_add_cart_variants span:contains("Aluminium") ~ span.badge:contains("50.40")',
+}, {
+    name: 'Add to cart',
+    trigger: '#add_to_cart',
+}, {
+    name: 'Check that modal was opened with the correct variant price',
+    trigger: 'main.oe_advanced_configurator_modal',
+    extra_trigger: 'main.oe_advanced_configurator_modal span:contains("800.40")',
+    run: () => {},
+}]});
diff --git a/static/tests/tours/website_sale_shop_custom_attributes_value.js b/static/tests/tours/website_sale_shop_custom_attributes_value.js
new file mode 100644
index 0000000..eb90d90
--- /dev/null
+++ b/static/tests/tours/website_sale_shop_custom_attributes_value.js
@@ -0,0 +1,57 @@
+/** @odoo-module **/
+
+import { registry } from "@web/core/registry";
+var optionVariantImage;
+
+registry.category("web_tour.tours").add("a_shop_custom_attribute_value", {
+    url: "/shop?search=Customizable Desk",
+    test: true,
+    steps: () => [{
+        content: "click on Customizable Desk",
+        trigger: '.oe_product_cart a:contains("Customizable Desk (TEST)")',
+}, {
+    trigger: 'a.js_add_cart_json:has(i.fa-plus)',
+    run: 'click',
+}, {
+    trigger: 'span.oe_currency_value:contains(750)',
+    run: function (){}, // check
+}, {
+    id: 'add_cart_step',
+    trigger: 'a:contains(Add to cart)',
+    run: 'click',
+}, {
+    trigger: '.oe_advanced_configurator_modal .js_product:eq(1) div:contains("Conference Chair (TEST) (Steel)")',
+    run: function () {
+        optionVariantImage = $('.oe_advanced_configurator_modal .js_product:eq(1) img.variant_image').attr('src');
+    }
+}, {
+    trigger: '.oe_advanced_configurator_modal .js_product:eq(1) input[data-value_name="Aluminium"]',
+}, {
+    trigger: '.oe_advanced_configurator_modal .js_product:eq(1) div:contains("Conference Chair (TEST) (Aluminium)")',
+    run: function () {
+        var newVariantImage = $('.oe_advanced_configurator_modal .js_product:eq(1) img.variant_image').attr('src');
+        if (newVariantImage !== optionVariantImage) {
+            $('<p>').text('image variant option src changed').insertAfter('.oe_advanced_configurator_modal .js_product:eq(1) .product-name');
+        }
+    }
+}, {
+    extra_trigger: '.oe_advanced_configurator_modal .js_product:eq(1) div:contains("image variant option src changed")',
+    trigger: '.oe_advanced_configurator_modal .js_product:eq(1) input[data-value_name="Steel"]',
+}, {
+    trigger: '.oe_price span:contains(22.90)',
+    run: function (){}, // check
+}, {
+    trigger: '.oe_advanced_configurator_modal .js_product:has(strong:contains(Conference Chair)) .js_add',
+    extra_trigger: '.oe_advanced_configurator_modal .js_product:has(strong:contains(Conference Chair))',
+    run: 'click'
+}, {
+    trigger: '.oe_advanced_configurator_modal .js_product:has(strong:contains(Chair floor protection)) .js_add',
+    extra_trigger: '.oe_advanced_configurator_modal .js_product:has(strong:contains(Chair floor protection))',
+    run: 'click'
+}, {
+    trigger: 'span:contains(1,557.00)',
+    run: function (){}, // check
+}, {
+    trigger: 'button:has(span:contains(Proceed to Checkout))',
+    run: 'click',
+}]});
diff --git a/static/tests/tours/website_sale_variants_modal_window.js b/static/tests/tours/website_sale_variants_modal_window.js
new file mode 100644
index 0000000..2e0ab10
--- /dev/null
+++ b/static/tests/tours/website_sale_variants_modal_window.js
@@ -0,0 +1,65 @@
+/** @odoo-module **/
+
+    import { registry } from "@web/core/registry";
+
+    // This tour relies on a data created from the python test.
+    registry.category("web_tour.tours").add('tour_variants_modal_window', {
+        test: true,
+        url: '/shop?search=Short (TEST)',
+        steps: () => [
+        {
+            content: "Select the Short (TEST) product",
+            trigger: '.oe_product_cart a:containsExact("Short (TEST)")',
+        },
+        {
+            content: "Click on the always variant",
+            trigger: 'input[data-attribute_name="Always attribute size"][data-value_name="M always"]',
+        },
+        {
+            content: "Click on the dynamic variant",
+            trigger: 'input[data-attribute_name="Dynamic attribute size"][data-value_name="M dynamic"]',
+        },
+        {
+            content: "Click on the never variant",
+            trigger: 'input[data-attribute_name="Never attribute size"][data-value_name="M never"]',
+        },
+        {
+            content: "Click on the never custom variant",
+            trigger: 'input[data-attribute_name="Never attribute size custom"][data-value_name="Yes never custom"]',
+        },
+        {
+            trigger: 'input.variant_custom_value',
+            run: 'text TEST',
+        },
+        {
+            content: "Click add to cart",
+            trigger: '#add_to_cart',
+        },
+        {
+            content: "Go through the modal window of the product configurator",
+            extra_trigger: '.oe_advanced_configurator_modal',
+            trigger: 'button span:contains(Proceed to Checkout)',
+            run: 'click'
+        },
+        {
+            content: "Check the product is in the cart",
+            trigger: 'div>a>h6:contains(Short (TEST))',
+        },
+        {
+            content: "Check always variant",
+            trigger: 'div>a>h6:contains(M always)',
+        },
+        {
+            content: "Check dynamic variant",
+            trigger: 'div>a>h6:contains(M dynamic)',
+        },
+        {
+            content: "Check never variant",
+            trigger: 'div.text-muted>span:contains(Never attribute size: M never)',
+        },
+        {
+            content: "Check never custom variant",
+            trigger: 'div.text-muted>span:contains(Never attribute size custom: Yes never custom: TEST)',
+            isCheck: true,
+        }
+    ]});
diff --git a/tests/__init__.py b/tests/__init__.py
new file mode 100644
index 0000000..a89d4e7
--- /dev/null
+++ b/tests/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import test_customize
+from . import test_website_sale_configurator
diff --git a/tests/test_customize.py b/tests/test_customize.py
new file mode 100644
index 0000000..b97b078
--- /dev/null
+++ b/tests/test_customize.py
@@ -0,0 +1,15 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.tests.common import HttpCase
+from odoo.addons.sale_product_configurator.tests.common import TestProductConfiguratorCommon
+from odoo.tests import tagged
+
+
+@tagged('post_install', '-at_install')
+class TestUi(HttpCase, TestProductConfiguratorCommon):
+
+    def test_01_admin_shop_custom_attribute_value_tour(self):
+        # Ensure that no pricelist is available during the test.
+        # This ensures that tours which triggers on the amounts will run properly.
+        self.env['product.pricelist'].search([]).action_archive()
+        self.start_tour("/", 'a_shop_custom_attribute_value', login="admin")
diff --git a/tests/test_website_sale_configurator.py b/tests/test_website_sale_configurator.py
new file mode 100644
index 0000000..65666e4
--- /dev/null
+++ b/tests/test_website_sale_configurator.py
@@ -0,0 +1,148 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo.tests import tagged
+from odoo.addons.sale_product_configurator.tests.common import TestProductConfiguratorCommon
+from odoo.addons.base.tests.common import HttpCaseWithUserPortal, HttpCaseWithUserDemo
+
+
+@tagged('post_install', '-at_install')
+class TestWebsiteSaleProductConfigurator(TestProductConfiguratorCommon, HttpCaseWithUserPortal, HttpCaseWithUserDemo):
+    @classmethod
+    def setUpClass(cls):
+        super().setUpClass()
+        cls.product_product_custo_desk.write({
+            'optional_product_ids': [(4, cls.product_product_conf_chair.id)],
+            'website_published': True,
+        })
+        cls.product_product_conf_chair.website_published = True
+
+        ptav_ids = cls.product_product_custo_desk.attribute_line_ids.product_template_value_ids
+        ptav_ids.filtered(lambda ptav: ptav.name == 'Aluminium').price_extra = 50.4
+
+    def test_01_product_configurator_variant_price(self):
+        product = self.product_product_conf_chair.with_user(self.user_portal)
+        ptav_ids = self.product_product_custo_desk.attribute_line_ids.product_template_value_ids
+        parent_combination = ptav_ids.filtered(lambda ptav: ptav.name in ('Aluminium', 'White'))
+        self.assertEqual(product._is_add_to_cart_possible(parent_combination), True)
+        # This is a regression test. The product configurator menu is proposed
+        # whenever a product has optional products. However, as the end user
+        # already picked a variant, the variant configuration menu is omitted
+        # in this case. However, we still want to make sure that the correct
+        # variant attributes are taken into account when calculating the price.
+        url = self.product_product_custo_desk.website_url
+        # Ensure that no pricelist is available during the test.
+        # This ensures that tours with triggers on the amounts will run properly.
+        self.env['product.pricelist'].search([]).action_archive()
+        self.start_tour(url, 'website_sale_product_configurator_optional_products_tour', login='portal')
+
+    def test_02_variants_modal_window(self):
+        """
+        The objective is to verify that the data concerning the variants are well transmitted
+        even when passing through a modal window (product configurator).
+
+        We create a product with the different attributes and we will modify them.
+        If the information is not correctly transmitted,
+        the default values of the variants will be used (the first one).
+        """
+
+        always_attribute, dynamic_attribute, never_attribute, never_attribute_custom = self.env['product.attribute'].create([
+            {
+                'name': 'Always attribute size',
+                'display_type': 'radio',
+                'create_variant': 'always'
+            },
+            {
+                'name': 'Dynamic attribute size',
+                'display_type': 'radio',
+                'create_variant': 'dynamic'
+            },
+            {
+                'name': 'Never attribute size',
+                'display_type': 'radio',
+                'create_variant': 'no_variant'
+            },
+            {
+                'name': 'Never attribute size custom',
+                'display_type': 'radio',
+                'create_variant': 'no_variant'
+            }
+        ])
+        always_S, always_M, dynamic_S, dynamic_M, never_S, never_M, never_custom_no, never_custom_yes = self.env['product.attribute.value'].create([
+            {
+                'name': 'S always',
+                'attribute_id': always_attribute.id,
+            },
+            {
+                'name': 'M always',
+                'attribute_id': always_attribute.id,
+            },
+            {
+                'name': 'S dynamic',
+                'attribute_id': dynamic_attribute.id,
+            },
+            {
+                'name': 'M dynamic',
+                'attribute_id': dynamic_attribute.id,
+            },
+            {
+                'name': 'S never',
+                'attribute_id': never_attribute.id,
+            },
+            {
+                'name': 'M never',
+                'attribute_id': never_attribute.id,
+            },
+            {
+                'name': 'No never custom',
+                'attribute_id': never_attribute_custom.id,
+            },
+            {
+                'name': 'Yes never custom',
+                'attribute_id': never_attribute_custom.id,
+                'is_custom': True,
+            }
+        ])
+
+        product_short = self.env['product.template'].create({
+            'name': 'Short (TEST)',
+            'website_published': True,
+        })
+
+        self.env['product.template.attribute.line'].create([
+            {
+                'product_tmpl_id': product_short.id,
+                'attribute_id': always_attribute.id,
+                'value_ids': [(4, always_S.id), (4, always_M.id)],
+            },
+            {
+                'product_tmpl_id': product_short.id,
+                'attribute_id': dynamic_attribute.id,
+                'value_ids': [(4, dynamic_S.id), (4, dynamic_M.id)],
+            },
+            {
+                'product_tmpl_id': product_short.id,
+                'attribute_id': never_attribute.id,
+                'value_ids': [(4, never_S.id), (4, never_M.id)],
+            },
+            {
+                'product_tmpl_id': product_short.id,
+                'attribute_id': never_attribute_custom.id,
+                'value_ids': [(4, never_custom_no.id), (4, never_custom_yes.id)],
+            },
+        ])
+
+        # Add an optional product to trigger the modal window
+        optional_product = self.env['product.template'].create({
+            'name': 'Optional product (TEST)',
+            'website_published': True,
+        })
+        product_short.optional_product_ids = [(4, optional_product.id)]
+
+        old_sale_order = self.env['sale.order'].search([])
+        self.start_tour("/", 'tour_variants_modal_window', login="demo")
+
+        # Check the name of the created sale order line
+        new_sale_order = self.env['sale.order'].search([]) - old_sale_order
+        new_order_line = new_sale_order.order_line
+        self.assertEqual(new_order_line.name, 'Short (TEST) (M always, M dynamic)\n\nNever attribute size: M never\nNever attribute size custom: Yes never custom: TEST')
diff --git a/views/templates.xml b/views/templates.xml
new file mode 100644
index 0000000..775ed93
--- /dev/null
+++ b/views/templates.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+    <template id="optional_products_modal" name="Optional Products">
+        <main class="modal-body">
+            <t t-call="website_sale_product_configurator.configure_optional_products" />
+        </main>
+    </template>
+
+    <template id="product_quantity_config">
+        <div t-if="is_view_active('website_sale.product_quantity')"
+            class="css_quantity input-group">
+            <button t-attf-href="#" class="btn btn-primary float_left js_add_cart_json d-none d-md-inline-block" aria-label="Remove one" title="Remove one">
+                <i class="fa fa-minus"></i>
+            </button>
+            <input type="text"
+                class="js_quantity form-control quantity text-center"
+                style="max-width: 4rem"
+                data-min="1"
+                name="add_qty"
+                t-att-value="add_qty or 1"/>
+            <button t-attf-href="#" class="btn btn-primary float_left js_add_cart_json d-none d-md-inline-block" aria-label="Add one" title="Add one">
+                <i class="fa fa-plus"></i>
+            </button>
+        </div>
+        <input t-else="" type="hidden" class="d-none js_quantity form-control quantity" name="add_qty" t-att-value="add_qty or 1"/>
+    </template>
+
+    <!-- modal: full table, currenclty selected products at top -->
+    <template id="configure_optional_products">
+        <table class="table table-striped table-sm">
+        <thead>
+            <tr>
+                <th class="td-img">
+                    <span class="label">Product</span>
+                </th>
+                <th>
+                    <span class="label"></span>
+                </th>
+                <th class="text-center td-qty">
+                    <span t-if="is_view_active('website_sale.product_quantity')"
+                          class="label">
+                        Quantity
+                    </span>
+                </th>
+                <th class="text-center td-price">
+                    <span class="label">Price</span>
+                </th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr class="js_product in_cart main_product">
+                <input type="hidden" class="product_template_id" t-att-value="product_template.id"/>
+                <input type="hidden"
+                       class="product_id"
+                       t-att-value="product.id"
+                       t-att-data-product-tracking-info="'product_tracking_info' in combination_info and json.dumps(combination_info['product_tracking_info'])"/>
+                <td class="td-img">
+                    <img class="product_detail_img" t-if="product" t-att-src="'/web/image/product.product/%s/image_128' % product_id" alt="Product Image"/>
+                    <img class="product_detail_img" t-else="" t-att-src="'/web/image/product.template/%s/image_128' % product_template_id" alt="Product Image"/>
+                </td>
+                <td class="td-product_name">
+                    <strong class="product-name product_display_name" t-out="combination_info['display_name']"/>
+                    <div class="text-muted small">
+                        <div t-field="product.description_sale"/>
+                        <div class="js_attributes"/>
+                        <div t-if="product_custom_attribute_values">
+                            <t t-foreach="product_custom_attribute_values" t-as="custom_value">
+                                <span t-esc="custom_value.get('attribute_value_name', None)"/>: <span t-esc="custom_value['custom_value']"/>
+                                <input type="hidden" class="variant_custom_value"
+                                       t-att-data-custom_product_template_attribute_value_id="custom_value['custom_product_template_attribute_value_id']"
+                                       t-att-data-attribute_value_name="custom_value.get('attribute_value_name', None)"
+                                       t-att-value="custom_value['custom_value']"/>
+                            </t>
+                        </div>
+                    </div>
+                    <div>
+                        <t t-if="product and not combination">
+                            <t t-set="combination" t-value="product_template._get_first_possible_combination()"/>
+                        </t>
+                        <t t-if="combination and not already_configured" t-call="website_sale.variants">
+                            <t t-set="ul_class" t-valuef="flex-column" />
+                            <t t-set="product" t-value="product_template"/>
+                        </t>
+                        <t t-else="">
+                            <ul class="d-none js_add_cart_variants mb-0" t-att-data-attribute_exclusions="{'exclusions: []'}"/>
+                            <div class="d-none oe_unchanged_value_ids" t-att-data-unchanged_value_ids="variant_values" ></div>
+                            <!-- Keep the information to use it later (when leaving the modal window) -->
+                            <div class="d-none no-attribute-info" t-att-data-attribute-value="json.dumps(no_attribute)"></div>
+                            <div class="d-none custom-attribute-info" t-att-data-attribute-value="json.dumps(custom_attribute)"></div>
+                        </t>
+                    </div>
+                </td>
+                <td class="text-center td-qty">
+                    <t t-call="website_sale_product_configurator.product_quantity_config"/>
+                </td>
+                <td class="text-center td-price" name="price">
+                    <div t-attf-class="text-danger oe_default_price oe_striked_price {{'' if combination_info['has_discounted_price'] else 'd-none'}}"
+                        t-out="combination_info['list_price']"
+                        t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
+                    <span class="oe_price product_id" style="white-space: nowrap;"
+                        t-att-data-product-id="product.id"
+                        t-out="combination_info['price']"
+                        t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
+                    <span class="js_raw_price d-none" t-out="product._get_contextual_price()"/>
+                    <p class="css_not_available_msg alert alert-warning">Option not available</p>
+                </td>
+            </tr>
+            <tr class="o_total_row">
+                <td colspan="4" class="text-end">
+                    <strong>Total:</strong>
+                    <span class="js_price_total fw-bold" style="white-space: nowrap;"
+                        t-att-data-product-id="product.id"
+                        t-out="combination_info['price'] * (add_qty or 1)"
+                        t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
+                </td>
+            </tr>
+            <t t-if="product.optional_product_ids and mode != 'edit'">
+                <tr class="o_select_options"><td colspan="4"><h4>Available Options:</h4></td></tr>
+                <t t-call="website_sale_product_configurator.optional_product_items">
+                    <t t-set="parent_combination" t-value="combination"/>
+                </t>
+            </t>
+        </tbody>
+        </table>
+    </template>
+
+    <!-- modal: optional products -->
+    <template id="optional_product_items">
+        <t t-foreach="product.optional_product_ids" t-as="product">
+            <t t-if="product._is_add_to_cart_possible(parent_combination)">
+
+                <t t-set="combination" t-value="product._get_first_possible_combination(parent_combination)"/>
+                <t t-set="combination_info" t-value="product._get_combination_info(combination, add_qty=add_qty)"/>
+                <t t-set="product_variant" t-value="product.env['product.product'].browse(combination_info['product_id'])"/>
+
+                <tr class="js_product" t-if="not combination_info.get('prevent_zero_price_sale', False)">
+                    <td class="td-img">
+                        <input type="hidden" class="product_template_id" t-att-value="product.id"/>
+                        <input type="hidden" class="product_id" t-attf-name="optional-product-#{product.id}" t-att-value="product_variant.id"/>
+                        <img t-if="product_variant" t-att-src="'/web/image/product.product/%s/image_128' % product_variant.id"  class="variant_image" alt="Product Image"/>
+                        <img t-else="" t-att-src="'/web/image/product.template/%s/image_128' % product.id"  class="variant_image" alt="Product Image"/>
+                    </td>
+                    <td class='td-product_name' colspan="2">
+                        <div class="mb-3">
+                            <strong class="product-name product_display_name" t-out="combination_info['display_name']"/>
+                            <div class="text-muted small" t-field="product.description_sale"/>
+                        </div>
+                        <t t-call="website_sale.variants"/>
+                    </td>
+                    <td class="text-center td-qty d-none">
+                        <t t-call='website_sale_product_configurator.product_quantity_config' />
+                    </td>
+                    <td class="text-center td-price">
+                        <div t-attf-class="text-danger oe_default_price oe_optional oe_striked_price {{'' if combination_info['has_discounted_price'] else 'd-none'}}"
+                            t-out="combination_info['list_price']"
+                            t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
+                        <div class="oe_price" style="white-space: nowrap;"
+                            t-out="combination_info['price']"
+                            t-options="{'widget': 'monetary', 'display_currency': website.currency_id}"/>
+                        <span class="js_raw_price d-none" t-out="combination_info['price']" />
+                        <p class="css_not_available_msg alert alert-warning">Option not available</p>
+
+                        <a role="button" href="#" class="js_add btn btn-primary btn-sm"><i class="fa fa-shopping-cart add-optionnal-item"></i> Add to cart</a>
+                        <span class="js_remove d-none">
+                            <a role="button" href="#" class="js_remove"><i class="fa fa-trash-o remove-optionnal-item"></i></a>
+                        </span>
+                    </td>
+                </tr>
+            </t>
+        </t>
+    </template>
+</odoo>