summaryrefslogtreecommitdiff
path: root/addons/sale_product_configurator
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/sale_product_configurator
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/sale_product_configurator')
-rw-r--r--addons/sale_product_configurator/__init__.py5
-rw-r--r--addons/sale_product_configurator/__manifest__.py28
-rw-r--r--addons/sale_product_configurator/controllers/__init__.py4
-rw-r--r--addons/sale_product_configurator/controllers/main.py86
-rw-r--r--addons/sale_product_configurator/data/sale_demo.xml25
-rw-r--r--addons/sale_product_configurator/i18n/ar.po262
-rw-r--r--addons/sale_product_configurator/i18n/bg.po258
-rw-r--r--addons/sale_product_configurator/i18n/bn.po251
-rw-r--r--addons/sale_product_configurator/i18n/ca.po259
-rw-r--r--addons/sale_product_configurator/i18n/ckb.po250
-rw-r--r--addons/sale_product_configurator/i18n/cs.po257
-rw-r--r--addons/sale_product_configurator/i18n/da.po260
-rw-r--r--addons/sale_product_configurator/i18n/de.po263
-rw-r--r--addons/sale_product_configurator/i18n/el.po255
-rw-r--r--addons/sale_product_configurator/i18n/eo.po246
-rw-r--r--addons/sale_product_configurator/i18n/es.po256
-rw-r--r--addons/sale_product_configurator/i18n/es_MX.po254
-rw-r--r--addons/sale_product_configurator/i18n/et.po259
-rw-r--r--addons/sale_product_configurator/i18n/eu.po259
-rw-r--r--addons/sale_product_configurator/i18n/fa.po255
-rw-r--r--addons/sale_product_configurator/i18n/fi.po260
-rw-r--r--addons/sale_product_configurator/i18n/fr.po264
-rw-r--r--addons/sale_product_configurator/i18n/he.po255
-rw-r--r--addons/sale_product_configurator/i18n/hi.po250
-rw-r--r--addons/sale_product_configurator/i18n/hr.po259
-rw-r--r--addons/sale_product_configurator/i18n/hu.po258
-rw-r--r--addons/sale_product_configurator/i18n/id.po259
-rw-r--r--addons/sale_product_configurator/i18n/it.po256
-rw-r--r--addons/sale_product_configurator/i18n/ja.po256
-rw-r--r--addons/sale_product_configurator/i18n/ka.po253
-rw-r--r--addons/sale_product_configurator/i18n/km.po254
-rw-r--r--addons/sale_product_configurator/i18n/ko.po254
-rw-r--r--addons/sale_product_configurator/i18n/lb.po220
-rw-r--r--addons/sale_product_configurator/i18n/lt.po258
-rw-r--r--addons/sale_product_configurator/i18n/lv.po246
-rw-r--r--addons/sale_product_configurator/i18n/mn.po256
-rw-r--r--addons/sale_product_configurator/i18n/nb.po256
-rw-r--r--addons/sale_product_configurator/i18n/nl.po258
-rw-r--r--addons/sale_product_configurator/i18n/pl.po265
-rw-r--r--addons/sale_product_configurator/i18n/pt.po258
-rw-r--r--addons/sale_product_configurator/i18n/pt_BR.po266
-rw-r--r--addons/sale_product_configurator/i18n/ro.po255
-rw-r--r--addons/sale_product_configurator/i18n/ru.po258
-rw-r--r--addons/sale_product_configurator/i18n/sale_product_configurator.pot246
-rw-r--r--addons/sale_product_configurator/i18n/si.po246
-rw-r--r--addons/sale_product_configurator/i18n/sk.po257
-rw-r--r--addons/sale_product_configurator/i18n/sl.po257
-rw-r--r--addons/sale_product_configurator/i18n/sv.po254
-rw-r--r--addons/sale_product_configurator/i18n/th.po254
-rw-r--r--addons/sale_product_configurator/i18n/tr.po265
-rw-r--r--addons/sale_product_configurator/i18n/uk.po255
-rw-r--r--addons/sale_product_configurator/i18n/ur.po246
-rw-r--r--addons/sale_product_configurator/i18n/vi.po258
-rw-r--r--addons/sale_product_configurator/i18n/zh_CN.po259
-rw-r--r--addons/sale_product_configurator/i18n/zh_TW.po250
-rw-r--r--addons/sale_product_configurator/models/__init__.py4
-rw-r--r--addons/sale_product_configurator/models/product.py43
-rw-r--r--addons/sale_product_configurator/models/sale_order_line.py11
-rw-r--r--addons/sale_product_configurator/security/ir.model.access.csv2
-rw-r--r--addons/sale_product_configurator/static/src/js/product_configurator_controller.js313
-rw-r--r--addons/sale_product_configurator/static/src/js/product_configurator_modal.js514
-rw-r--r--addons/sale_product_configurator/static/src/js/product_configurator_renderer.js133
-rw-r--r--addons/sale_product_configurator/static/src/js/product_configurator_view.js20
-rw-r--r--addons/sale_product_configurator/static/src/js/product_configurator_widget.js378
-rw-r--r--addons/sale_product_configurator/static/tests/product_configurator.test.js309
-rw-r--r--addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js165
-rw-r--r--addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js160
-rw-r--r--addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js79
-rw-r--r--addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js99
-rw-r--r--addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js79
-rw-r--r--addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js95
-rw-r--r--addons/sale_product_configurator/tests/__init__.py5
-rw-r--r--addons/sale_product_configurator/tests/common.py114
-rw-r--r--addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py171
-rw-r--r--addons/sale_product_configurator/views/assets.xml28
-rw-r--r--addons/sale_product_configurator/views/sale_views.xml43
-rw-r--r--addons/sale_product_configurator/views/templates.xml220
-rw-r--r--addons/sale_product_configurator/wizard/__init__.py4
-rw-r--r--addons/sale_product_configurator/wizard/sale_product_configurator.py21
-rw-r--r--addons/sale_product_configurator/wizard/sale_product_configurator_views.xml40
80 files changed, 15963 insertions, 0 deletions
diff --git a/addons/sale_product_configurator/__init__.py b/addons/sale_product_configurator/__init__.py
new file mode 100644
index 00000000..1f453008
--- /dev/null
+++ b/addons/sale_product_configurator/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+
+from . import models
+from . import controllers
+from . import wizard
diff --git a/addons/sale_product_configurator/__manifest__.py b/addons/sale_product_configurator/__manifest__.py
new file mode 100644
index 00000000..8d49882c
--- /dev/null
+++ b/addons/sale_product_configurator/__manifest__.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+{
+ 'name': "Sale Product Configurator",
+ 'version': '1.0',
+ 'category': 'Hidden',
+ 'summary': "Configure your products",
+
+ 'description': """
+Technical module installed when the user checks the "module_sale_product_configurator" setting.
+The main purpose is to override the sale_order view to allow configuring products in the SO form.
+
+It also enables the "optional products" feature.
+ """,
+
+ 'depends': ['sale'],
+ 'data': [
+ 'security/ir.model.access.csv',
+ 'views/assets.xml',
+ 'views/templates.xml',
+ 'views/sale_views.xml',
+ 'wizard/sale_product_configurator_views.xml',
+ ],
+ 'demo': [
+ 'data/sale_demo.xml',
+ ],
+ 'license': 'LGPL-3',
+}
diff --git a/addons/sale_product_configurator/controllers/__init__.py b/addons/sale_product_configurator/controllers/__init__.py
new file mode 100644
index 00000000..5d4b25db
--- /dev/null
+++ b/addons/sale_product_configurator/controllers/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import main
diff --git a/addons/sale_product_configurator/controllers/main.py b/addons/sale_product_configurator/controllers/main.py
new file mode 100644
index 00000000..d207d416
--- /dev/null
+++ b/addons/sale_product_configurator/controllers/main.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import http
+from odoo.http import request
+
+
+class ProductConfiguratorController(http.Controller):
+ @http.route(['/sale_product_configurator/configure'], type='json', auth="user", methods=['POST'])
+ def configure(self, product_template_id, pricelist_id, **kw):
+ add_qty = int(kw.get('add_qty', 1))
+ product_template = request.env['product.template'].browse(int(product_template_id))
+ pricelist = self._get_pricelist(pricelist_id)
+
+ product_combination = False
+ attribute_value_ids = set(kw.get('product_template_attribute_value_ids', []))
+ attribute_value_ids |= set(kw.get('product_no_variant_attribute_value_ids', []))
+ if attribute_value_ids:
+ product_combination = request.env['product.template.attribute.value'].browse(attribute_value_ids)
+
+ if pricelist:
+ product_template = product_template.with_context(pricelist=pricelist.id, partner=request.env.user.partner_id)
+
+ return request.env['ir.ui.view']._render_template("sale_product_configurator.configure", {
+ 'product': product_template,
+ 'pricelist': pricelist,
+ 'add_qty': add_qty,
+ 'product_combination': product_combination
+ })
+
+ @http.route(['/sale_product_configurator/show_optional_products'], type='json', auth="user", methods=['POST'])
+ def show_optional_products(self, product_id, variant_values, pricelist_id, **kw):
+ pricelist = self._get_pricelist(pricelist_id)
+ return self._show_optional_products(product_id, variant_values, pricelist, False, **kw)
+
+ @http.route(['/sale_product_configurator/optional_product_items'], type='json', auth="user", methods=['POST'])
+ def optional_product_items(self, product_id, pricelist_id, **kw):
+ pricelist = self._get_pricelist(pricelist_id)
+ return self._optional_product_items(product_id, pricelist, **kw)
+
+ def _optional_product_items(self, product_id, pricelist, **kw):
+ add_qty = int(kw.get('add_qty', 1))
+ product = request.env['product.product'].browse(int(product_id))
+
+ parent_combination = product.product_template_attribute_value_ids
+ if product.env.context.get('no_variant_attribute_values'):
+ # Add "no_variant" attribute values' exclusions
+ # They are kept in the context since they are not linked to this product variant
+ parent_combination |= product.env.context.get('no_variant_attribute_values')
+
+ return request.env['ir.ui.view']._render_template("sale_product_configurator.optional_product_items", {
+ 'product': product,
+ 'parent_name': product.name,
+ 'parent_combination': parent_combination,
+ 'pricelist': pricelist,
+ 'add_qty': add_qty,
+ })
+
+ def _show_optional_products(self, product_id, variant_values, pricelist, handle_stock, **kw):
+ product = request.env['product.product'].browse(int(product_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))
+
+ if not has_optional_products:
+ return False
+
+ add_qty = int(kw.get('add_qty', 1))
+
+ no_variant_attribute_values = combination.filtered(
+ lambda product_template_attribute_value: product_template_attribute_value.attribute_id.create_variant == 'no_variant'
+ )
+ if no_variant_attribute_values:
+ product = product.with_context(no_variant_attribute_values=no_variant_attribute_values)
+
+ return request.env['ir.ui.view']._render_template("sale_product_configurator.optional_products_modal", {
+ 'product': product,
+ 'combination': combination,
+ 'add_qty': add_qty,
+ 'parent_name': product.name,
+ 'variant_values': variant_values,
+ 'pricelist': pricelist,
+ 'handle_stock': handle_stock,
+ })
+
+ def _get_pricelist(self, pricelist_id, pricelist_fallback=False):
+ return request.env['product.pricelist'].browse(int(pricelist_id or 0))
diff --git a/addons/sale_product_configurator/data/sale_demo.xml b/addons/sale_product_configurator/data/sale_demo.xml
new file mode 100644
index 00000000..117ebd6a
--- /dev/null
+++ b/addons/sale_product_configurator/data/sale_demo.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <data noupdate="1">
+ <record id="product_product_1_product_template" model="product.template">
+ <field name="name">Chair floor protection</field>
+ <field name="categ_id" ref="product.product_category_5"/>
+ <field name="list_price">12.0</field>
+ <field name="weight">0.01</field>
+ <field name="uom_id" ref="uom.product_uom_unit"/>
+ <field name="uom_po_id" ref="uom.product_uom_unit"/>
+ <field name="description_sale">Office chairs can harm your floor: protect it.</field>
+ <field name="image_1920" type="base64" file="sale/static/img/floor_protection-image.png"/>
+ </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')])]"/>
+ </record>
+ <record id="product.product_product_11_product_template" model="product.template">
+ <field name="optional_product_ids" eval="[(6,0,[ref('product_product_1_product_template')])]"/>
+ </record>
+ <record id="product.product_product_13_product_template" model="product.template">
+ <field name="optional_product_ids" eval="[(6,0,[ref('product.product_product_11_product_template')])]"/>
+ </record>
+ </data>
+</odoo>
diff --git a/addons/sale_product_configurator/i18n/ar.po b/addons/sale_product_configurator/i18n/ar.po
new file mode 100644
index 00000000..7adcc968
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ar.po
@@ -0,0 +1,262 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Sherif Abd Ekmoniem <sherif.tsupport@gmail.com>, 2020
+# Mustafa Rawi <mustafa@cubexco.com>, 2020
+# amrnegm <amrnegm.01@gmail.com>, 2020
+# hoxhe Aits <hoxhe0@gmail.com>, 2020
+# Osoul <baruni@osoul.ly>, 2020
+# Mohammed Albasha <m.albasha.ma@gmail.com>, 2020
+# Ghaith Gammar <g.gammar@saharaifs.net>, 2020
+# Osama Ahmaro <osamaahmaro@gmail.com>, 2020
+# Zuhair Hammadi <zuhair12@gmail.com>, 2020
+# Shaima Safar <shaima.safar@open-inside.com>, 2020
+# Mohamed Alansari <Mohammad.alansari@outlook.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Mohamed Alansari <Mohammad.alansari@outlook.com>, 2020\n"
+"Language-Team: Arabic (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>الإجمالي:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "إضافة"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "إضافة واحدة"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "قيم الخاصية"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "الخيارات المتاحة:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "العودة"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "الغاء"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "حماية كرسي الأرضية"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "إعداد"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "إعداد منتج"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "تأكيد"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "أنشئ بواسطة"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "أنشئ في"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "الاسم المعروض"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "المُعرف"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "آخر تعديل في"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "آخر تحديث بواسطة"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "آخر تحديث في"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "يمكن أن تتضرر أرضيتك بسبب كراسي المكتب: احمها."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "الخيار غير متاح"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "منتجات اختيارية"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"تُقترح بعض المنتجات الاختيارية كلما يضغط العميل *أضف إلى عربة التسوق* "
+"(استراتيجية البيع العابر، مثلًا: لأجهزة الكمبيوتر: الضمان، والبرمجيات، إلخ)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "خيارات"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "السعر"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "قائمه الأسعار"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "المنتج"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "صورة المنتج"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "قالب المنتج"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "موديل المنتج"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "الكمية"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "إزالة واحدة"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "مهيئ منتج المبيعات"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "بند أمر المبيعات"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "حفظ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "هذه التركيبة غير موجودة."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "لا توجد تركيبة صحيحة لهذا المنتج."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "الوحدات"
diff --git a/addons/sale_product_configurator/i18n/bg.po b/addons/sale_product_configurator/i18n/bg.po
new file mode 100644
index 00000000..52fedd9a
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/bg.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Rosen Vladimirov <vladimirov.rosen@gmail.com>, 2020
+# Anton Vassilev, 2020
+# Igor Sheludko <igor.sheludko@gmail.com>, 2020
+# Albena Mincheva <albena_vicheva@abv.bg>, 2020
+# Maria Boyadjieva <marabo2000@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Maria Boyadjieva <marabo2000@gmail.com>, 2020\n"
+"Language-Team: Bulgarian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Общо:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Добавете"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Атрибутивни стойности"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Назад"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Откажи"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Конфигурирайте"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Потвърдете"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Създадено от"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Създадено на"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Име за показване"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Последно променено на"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Последно обновено от"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Последно обновено на"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Опционални продукти"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Незадължителни продукти се предлагат всеки път, когато клиентът натисне * "
+"Добавете в количката * (стратегия за кръстосани продажби, например за "
+"компютри: гаранция, софтуер и т.н.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Настройки"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Цена"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Ценова листа"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Продукт"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Изображение на продукта"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Шаблон за продукт "
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Продуктов вариант"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Количество"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Ред на поръчка за продажби"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Запазете"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Единици"
diff --git a/addons/sale_product_configurator/i18n/bn.po b/addons/sale_product_configurator/i18n/bn.po
new file mode 100644
index 00000000..3a7895a2
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/bn.po
@@ -0,0 +1,251 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2021
+# Abu Zafar <azmikbal@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Abu Zafar <azmikbal@gmail.com>, 2021\n"
+"Language-Team: Bengali (https://www.transifex.com/odoo/teams/41243/bn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: bn\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "যোগ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "পিছনে "
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "বাতিল"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "নিশ্চিত করুন"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "দ্বারা সৃষ্টি"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "তৈরি"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "প্রদর্শন নাম"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "আইডি "
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "সর্বশেষ সংশোধিত"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "সর্বশেষ আপডেট করেছেন"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "সর্বশেষ আপডেট হয়েছে"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "বিকল্প সমূহ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "বিক্রয় আদেশ লাইন"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "সংরক্ষণ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/ca.po b/addons/sale_product_configurator/i18n/ca.po
new file mode 100644
index 00000000..be5e5325
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ca.po
@@ -0,0 +1,259 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Marc Tormo i Bochaca <mtbochaca@gmail.com>, 2020
+# Carles Antoli <carlesantoli@hotmail.com>, 2020
+# Quim - eccit <quim@eccit.com>, 2020
+# Sandra Franch <sandra.franch@upc.edu>, 2020
+# Manel Fernandez Ramirez <manelfera@outlook.com>, 2020
+# Arnau Ros, 2020
+# jabelchi, 2021
+# José Cabrera Lozano <jose.cabrera@edukative.es>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: José Cabrera Lozano <jose.cabrera@edukative.es>, 2021\n"
+"Language-Team: Catalan (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Afegir"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Afegir-ne un"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valors de atribut"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opcions disponibles:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Enrere"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configura"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurar un producte"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Creat per"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Creat el"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valors personalitzats"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nom mostrat"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valor extra"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Última modificació el "
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Última actualització per"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Última actualització el"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opció no disponible"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Productes opcionals"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opcions"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Preu"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Tarifa"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Producte"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imatge de Producte"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producte"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variants de producte"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantitat"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Eliminar un"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Línia comanda de venda"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Desar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Aquest producte no té cap combinació vàlida."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unitats"
diff --git a/addons/sale_product_configurator/i18n/ckb.po b/addons/sale_product_configurator/i18n/ckb.po
new file mode 100644
index 00000000..7c25839f
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ckb.po
@@ -0,0 +1,250 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Haval Abdulkarim <haval.abdulkarim@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Haval Abdulkarim <haval.abdulkarim@gmail.com>, 2020\n"
+"Language-Team: Central Kurdish (https://www.transifex.com/odoo/teams/41243/ckb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ckb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "زیادکردن"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "پاشگەزبوونەوە"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "پشتڕاستکردنەوە"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "دروستکراوە لەلایەن"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "دروستکراوە لە"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "پیشاندانی ناو"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ناسنامە"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "دواین دەستکاری لە"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "دواین تازەکردنەوە لەلایەن"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "دواین تازەکردنەوە لە"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "بڕ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "هێڵی داواکاری فرۆشتن"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "پاشەکەوتکردن"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/cs.po b/addons/sale_product_configurator/i18n/cs.po
new file mode 100644
index 00000000..563a0ec4
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/cs.po
@@ -0,0 +1,257 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Jan Horzinka <jan.horzinka@centrum.cz>, 2020
+# Michal Veselý <michal@veselyberanek.net>, 2020
+# karolína schusterová <karolina.schusterova@vdp.sk>, 2021
+# trendspotter, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: trendspotter, 2021\n"
+"Language-Team: Czech (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Celkem:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Přidat"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Přidat jeden"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Hodnoty atributů"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Dostupné možnosti:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Zpět"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Zrušit"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Ochrana podlahy židle"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfigurovat"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Nakonfigurujte produkt"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Potvrdit"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Vytvořeno od"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Vytvořeno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Vlastní hodnoty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Zobrazované jméno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Extra hodnoty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Je produkt konfigurovatelný?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Naposled změněno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Naposledy upraveno od"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Naposled upraveno"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Kancelářské židle mohou poškodit podlahu: chraňte ji."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Možnost není k dispozici"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Volitelné produkty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Volitelné produkty jsou navrhovány vždy, když zákazník stiskne *Přidat do "
+"košíku* (strategie křížového prodeje, např. Pro počítače: záruka, software "
+"atd.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Možnosti"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Cena"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Ceník"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Obrázek produktu"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Šablona produktu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Varianta výrobku"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Množství"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Odebrat jeden"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Konfigurátor prodejních produktů"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Řádek zakázky"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Uložit"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Tato kombinace neexistuje."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Tento produkt nemá platnou kombinaci."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Jednotky"
diff --git a/addons/sale_product_configurator/i18n/da.po b/addons/sale_product_configurator/i18n/da.po
new file mode 100644
index 00000000..798b0baf
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/da.po
@@ -0,0 +1,260 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Per Rasmussen <perhgrasmussen@gmail.com>, 2020
+# Morten Schou <ms@msteknik.dk>, 2020
+# Jesper Carstensen <jc@danodoo.dk>, 2020
+# Pernille Kristensen <pernillekristensen1994@gmail.com>, 2020
+# Sanne Kristensen <sanne@vkdata.dk>, 2020
+# Simon Andersen <simon@vkdata.dk>, 2020
+# lhmflexerp <lhm@flexerp.dk>, 2020
+# Mads Søndergaard, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Mads Søndergaard, 2020\n"
+"Language-Team: Danish (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Tilføj"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Tilføj en"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Egenskabs værdier"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Tilgængelige muligheder:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Tilbage"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Annullér"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Stol gulvbeskyttelse"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfigurer"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfigurer et produkt"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Bekræft"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Oprettet af"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Oprettet den"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Tilpasset værdier"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Vis navn"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Ekstra værdier"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Kan produktet konfigureres?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Sidst ændret den"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Sidst opdateret af"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Sidst opdateret den"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Kontorstole kan beskadige dit gulv: beskyt det."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Valgmulighed ikke tilgængelig"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Valgfrie produkter"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Valgfrie produkter foreslås, når kunden trykker på *Tilføj til kurv* "
+"(krydssalgs-strategi, f.eks. til computere: garanti, software osv.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Valgmuligheder"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Pris"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Prisliste"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produktbillede"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Produktskabelon"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Varevariant"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Antal"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Fjern én"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Salgsprodukt-konfigurator"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Salgsordrelinje"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Gem"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Denne kombination eksistere ikke."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Dette produkt har ingen gyldig kombination."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Enheder"
diff --git a/addons/sale_product_configurator/i18n/de.po b/addons/sale_product_configurator/i18n/de.po
new file mode 100644
index 00000000..3e1f6c28
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/de.po
@@ -0,0 +1,263 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# e2f <projects@e2f.com>, 2020
+# Martin Trigaux, 2020
+# Ermin Trevisan <trevi@twanda.com>, 2020
+# Katharina Moritz <kmo@e2f.com>, 2020
+# Michael Schütt <michael.schuett.lwl@gmail.com>, 2020
+# Leon Grill <leg@odoo.com>, 2020
+# Chris Egal <sodaswed@web.de>, 2020
+# Felix Schubert <felix.schubert@go-erp.com>, 2020
+# Andreas Schmidt <schmigo@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Andreas Schmidt <schmigo@gmail.com>, 2021\n"
+"Language-Team: German (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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\"/> Zum Warenkorb "
+"hinzufügen"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Hinzufügen"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Hinzufügen"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Attributwerte"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Verfügbare Optionen:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Zurück"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Stuhlbodenschutz"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfigurieren"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Ein Produkt konfigurieren"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Bestätigen"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Erstellt von"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Erstellt am"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Benutzerdefinierter Werte"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Anzeigename"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Extra Werte"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Ist das Produkt konfigurierbar?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Zuletzt geändert am"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Zuletzt aktualisiert durch"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Zuletzt aktualisiert am"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Bürostühle können Ihren Boden beschädigen: Schützen Sie ihn."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Option nicht verfügbar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Optionale Produkte"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Optionale Produkte werden vorgeschlagen, wenn der Kunde auf „In den "
+"Warenkorb“ klickt (Cross-Selling-Strategie, z. B. für Computer: Garantie, "
+"Software usw.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Optionen"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Preis"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Preisliste"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produktbild"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Produktvorlage"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Produktvarianten"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Menge"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Entfernen"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Verkauf Produktkonfigurator"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Auftragsposition"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Speichern"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Diese Kombination existiert nicht."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Dieses Produkt hat keine gültige Kombination."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Einheiten"
diff --git a/addons/sale_product_configurator/i18n/el.po b/addons/sale_product_configurator/i18n/el.po
new file mode 100644
index 00000000..35df2604
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/el.po
@@ -0,0 +1,255 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Kostas Goutoudis <goutoudis@gmail.com>, 2020
+# George Tarasidis <george_tarasidis@yahoo.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: George Tarasidis <george_tarasidis@yahoo.com>, 2020\n"
+"Language-Team: Greek (https://www.transifex.com/odoo/teams/41243/el/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: el\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Σύνολο:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Προσθήκη"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Τιμές Χαρακτηριστικών"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Πίσω"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Παραμετροποίηση"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Επιβεβαίωση"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Δημιουργήθηκε από"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Δημιουργήθηκε στις"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Εμφάνιση Ονόματος"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "Κωδικός"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Τελευταία τροποποίηση στις"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Τελευταία Ενημέρωση από"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Τελευταία Ενημέρωση στις"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Προαιρετικά Είδη"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Προαιρετικά είδη που προτείνονται κάθε φορά που ο πελάτης κάνει κλικ στο "
+"*Προσθήκη στο καλάθι* (στρατηγική διασταυρούμενων πωλήσεων, π.χ. για "
+"υπολογιστές: εγγύηση, λογισμικό κ.λπ.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Επιλογές"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "ΤΙΜΗ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Τιμοκατάλογος"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Είδος"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Εικόνα Είδους"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Πρότυπο Είδους "
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Μεταβλητή Είδους"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Ποσότητα"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Γραμμή Παραγγελίας"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Αποθήκευση"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Αυτός ο συνδυασμός δεν υπάρχει."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/eo.po b/addons/sale_product_configurator/i18n/eo.po
new file mode 100644
index 00000000..71b0d4ea
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/eo.po
@@ -0,0 +1,246 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Language-Team: Esperanto (https://www.transifex.com/odoo/teams/41243/eo/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: eo\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/es.po b/addons/sale_product_configurator/i18n/es.po
new file mode 100644
index 00000000..82c7b3d7
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/es.po
@@ -0,0 +1,256 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Leonardo J. Caballero G. <leonardocaballero@gmail.com>, 2020
+# Jon Perez <jop@odoo.com>, 2020
+# Martin Trigaux, 2020
+# Jesús Alan Ramos Rodríguez <alan.ramos@jarsa.com.mx>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Jesús Alan Ramos Rodríguez <alan.ramos@jarsa.com.mx>, 2021\n"
+"Language-Team: Spanish (https://www.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=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Añadir"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Agregue uno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valores de atributo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opciones disponibles: "
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Volver"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Protección del piso de la silla"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configurar"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurar un producto"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valores personalizados"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nombre mostrado"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valores extra"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "¿El producto es configurable?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Las sillas de oficina pueden dañar su piso: protéjalo."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opción no disponible"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Productos opcionales"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Los productos opcionales aparecen como sugerencias cada vez que el cliente "
+"pulsa en \"Añadir al carro\" (estrategia de venta cruzada; p. ej., en el "
+"caso de los ordenadores: garantía, software, etc.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opciones"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Precio"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Tarifa"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Producto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagen del producto"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variantes de producto"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Quitar uno"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Configurador de producto en oferta"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Línea de pedido de venta"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Guardar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Esta combinación no existe."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Este producto no tiene combinaciones válidas."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unidades"
diff --git a/addons/sale_product_configurator/i18n/es_MX.po b/addons/sale_product_configurator/i18n/es_MX.po
new file mode 100644
index 00000000..32e70d71
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/es_MX.po
@@ -0,0 +1,254 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Cécile Collart <cco@odoo.com>, 2021
+# Lucia Pacheco <lpo@odoo.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Lucia Pacheco <lpo@odoo.com>, 2021\n"
+"Language-Team: Spanish (Mexico) (https://www.transifex.com/odoo/teams/41243/es_MX/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: es_MX\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Añadir"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Agregar uno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valores de atributo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opciones disponibles: "
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Regresar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Protector de piso para silla"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configurar"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurar un producto"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Creado por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Creado el"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valores personalizados"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nombre en pantalla"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valores adicionales"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "¿El producto es configurable?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Última modificación el"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Última actualización por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Última actualización el"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Las sillas de oficina pueden dañar su piso: protéjalo."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opción no disponible"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Productos opcionales"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Los productos opcionales se recomiendan cada vez que el cliente hace clic en"
+" *Agregar al carrito* (estrategia de venta cruzada. Por ejemplo, para "
+"computadoras: garantía, software, etc)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opciones"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Precio"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Lista de precios"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Producto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagen del producto"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Plantilla de producto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variante del producto"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Cantidad"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Eliminar uno"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Configurador de venta de productos"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Línea de la orden de venta"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Guardar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Esta combinación no existe."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Este producto no tiene combinaciones válidas."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unidades"
diff --git a/addons/sale_product_configurator/i18n/et.po b/addons/sale_product_configurator/i18n/et.po
new file mode 100644
index 00000000..7ac9b9d8
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/et.po
@@ -0,0 +1,259 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Rivo Zängov <eraser@eraser.ee>, 2020
+# Martin Trigaux, 2020
+# Wanradt Koell <wanradt@gmail.com>, 2020
+# Arma Gedonsky <armagedonsky@hot.ee>, 2020
+# Egon Raamat <egon@avalah.ee>, 2020
+# Marek Pontus, 2020
+# Algo Kärp <algokarp@gmail.com>, 2020
+# Eneli Õigus <enelioigus@gmail.com>, 2020
+# Piia Paurson <piia@avalah.ee>, 2021
+# Triine Aavik <triine@avalah.ee>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Triine Aavik <triine@avalah.ee>, 2021\n"
+"Language-Team: Estonian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Kokku:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Lisa"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Lisage üks"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Atribuudi väärtused"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Lisavalikud:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Tagasi"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Tühista"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Seadista"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfigureeri toode"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Kinnitage"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Loonud"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Loodud"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Kohandatud väärtused"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Kuva nimi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Kas see toode on konfigureeritav?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Viimati muudetud (millal)"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Viimati uuendatud (kelle poolt)"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Viimati uuendatud"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Valik pole saadaval"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Valikulised tooted"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Seaded"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Hind"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Hinnakiri"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Toode"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Toote pilt"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Toote mall"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Toote variatsioon"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kogus"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Eemaldage üks"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Müügitoote konfiguraator"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Müügitellimuse rida"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Salvesta"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Seda kombinatsiooni ei eksisteeri."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Tootel ei ole ühtegi kehtivat kombinatsiooni."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Ühikud"
diff --git a/addons/sale_product_configurator/i18n/eu.po b/addons/sale_product_configurator/i18n/eu.po
new file mode 100644
index 00000000..e19909d1
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/eu.po
@@ -0,0 +1,259 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2021
+# oihane <oihanecruce@gmail.com>, 2021
+# ibinka lete <ilete@fpbidasoa.net>, 2021
+# Gorka Toledo <gorka.toledo@gmail.com>, 2021
+# Eneko <eastigarraga@codesyntax.com>, 2021
+# Mikel Lizarralde <mikellizarralde@gmail.com>, 2021
+# 61590936fa9bf290362ee306eeabf363_944dd10 <a8bfd5a0b49b9c8455f33fc521764cc3_680674>, 2021
+# Iñaki Ibarrola <inakiibarrola@yahoo.es>, 2021
+# Victor Laskurain <blaskurain@binovo.es>, 2021
+# Maialen Rodriguez <maialenrodriguez98@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Maialen Rodriguez <maialenrodriguez98@gmail.com>, 2021\n"
+"Language-Team: Basque (https://www.transifex.com/odoo/teams/41243/eu/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: eu\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totala:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Gehitu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Ezaugarrien balioak"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Aukera eskuragarriak:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Atzera"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Ezeztatu"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfiguratu"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfiguratu produktu bat"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Baieztatu"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Nork sortua"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Noiz sortua"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Izena erakutsi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Azken aldaketa"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Azkenengoz eguneratu zuena"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Azken eguneraketa noiz"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Aukera ez dago eskuragarri"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Aukerako produktua"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Aukerak"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Price"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Prezio zerrenda "
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produktua"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Produktuaren txantiloia"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Produktuaren aldaera"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kopurua"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Salmenta-eskaera lerroa"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Gorde"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/fa.po b/addons/sale_product_configurator/i18n/fa.po
new file mode 100644
index 00000000..4993faf2
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/fa.po
@@ -0,0 +1,255 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Hamid Darabi, 2020
+# Faraz Sadri Alamdari <ifarazir@gmail.com>, 2020
+# Sahar Daraye <sahar.daraye.1369@gmail.com>, 2020
+# Hamed Mohammadi <hamed@dehongi.com>, 2020
+# Mohsen Mohammadi <iammohsen.123@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Mohsen Mohammadi <iammohsen.123@gmail.com>, 2021\n"
+"Language-Team: Persian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>کل:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "افزودن"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "افزودن یکی"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "مقدار مشخصه"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "گزینه‌های موجود:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "بازگشت"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "لغو"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "محافظ کف برای صندلی"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "پیکربندی"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "پیکربندی یک محصول"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "تایید"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "ایجاد توسط"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "ایجاد شده در"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "مقادیر سفارشی"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "نام نمایشی"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "مقادیر اضافی"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "شناسه"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "آیا محصول قابل پیکربندی است؟"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "آخرین تغییر در"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "آخرین به روز رسانی توسط"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "آخرین به روز رسانی در"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "صندلی دفتر می‌تواند به کف صدمه بزند: مراقبت کنید."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "پیشنهاد در دسترس نیست"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "محصولات اختیاری"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "گزینه‌ها"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "قیمت"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "لیست قیمت"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "محصول"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "تصویر محصول"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "قالب محصول"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "گونه محصول"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "تعداد"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "حذف یکی"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "پیکربندی کننده فروش محصول"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "سطر سفارش‌فروش"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "ذخیره"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "این ترکیب وجود ندارد"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "این محصول هیچ ترکیب معتبری ندارد"
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "واحد ها"
diff --git a/addons/sale_product_configurator/i18n/fi.po b/addons/sale_product_configurator/i18n/fi.po
new file mode 100644
index 00000000..2a9c15f0
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/fi.po
@@ -0,0 +1,260 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Kari Lindgren <kari.lindgren@emsystems.fi>, 2020
+# Mikko Salmela <salmemik@gmail.com>, 2020
+# Svante Suominen <svante.suominen@web-veistamo.fi>, 2020
+# Jarmo Kortetjärvi <jarmo.kortetjarvi@gmail.com>, 2020
+# Tuomo Aura <tuomo.aura@web-veistamo.fi>, 2020
+# Timo Koukkari <ti.ko@netikka.fi>, 2020
+# Tuomas Lyyra <tuomas.lyyra@legenda.fi>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Tuomas Lyyra <tuomas.lyyra@legenda.fi>, 2020\n"
+"Language-Team: Finnish (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Yhteensä:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Lisää"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Lisää yksi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Attribuuttien arvot"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Valittavissa olevat vaihtoehdot: "
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Takaisin"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Peruuta"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Tuolin lattian suoja"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfiguroi"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Lisää konfiguroitava tuote"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Vahvista"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Luonut"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Luotu"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Muokatut arvot"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Näyttönimi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Lisäarvot"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "Tunniste (ID)"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Viimeksi muokattu"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Viimeksi päivitetty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Viimeksi päivitetty"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Työtuolit voivat vahingoittaa lattiaasi: suojaa se."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Vaihtoehtoa ei ole saatavana"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Lisätuotteet"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Valinnaisia tuotteita suositellaan aina, kun asiakas osuu * Lisää "
+"ostoskoriin * (ristiinmyyntistrategia, esimerkiksi tietokoneille: takuu, "
+"ohjelmistot jne.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Vaihtoehdot"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Hinta"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Hinnasto"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Tuote"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Tuotekuva"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Tuotemalli"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Tuotevariaatio"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Määrä"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Poista yksi"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Tarjoustuotteen konfiguraattori"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Myyntitilausrivi"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Tallenna"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Tätä yhdistelmää ei ole olemassa."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Tällä tuotteella ei ole kelvollista yhdistelmää."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Yksiköt"
diff --git a/addons/sale_product_configurator/i18n/fr.po b/addons/sale_product_configurator/i18n/fr.po
new file mode 100644
index 00000000..0a9c1628
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/fr.po
@@ -0,0 +1,264 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# e2f <projects@e2f.com>, 2020
+# Moka Tourisme <hello@mokatourisme.fr>, 2020
+# Richard Mathot <rim@odoo.com>, 2020
+# Clo <clo@odoo.com>, 2020
+# Aurélien Pillevesse <aurelienpillevesse@hotmail.fr>, 2020
+# Fred Gilson <fgi@odoo.com>, 2020
+# LEONARD Jean-Christophe <jean-christophe.leonard@myceliandre.fr>, 2020
+# Sébastien BÜHL <buhlsebastien@gmail.com>, 2020
+# omaodoo <oma@odoo.com>, 2020
+# Gilles Mangin <gilles.mangin@phidias.fr>, 2020
+# edc <edc@odoo.com>, 2020
+# Martin Trigaux, 2020
+# Cécile Collart <cco@odoo.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Cécile Collart <cco@odoo.com>, 2020\n"
+"Language-Team: French (https://www.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=2; plural=(n > 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total :</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Ajouter"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Ajouter"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valeurs de caractéristique"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Options disponibles:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Retour"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Annuler"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Protection de sol pour chaise"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configurer"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurez un article"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmer"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Créé par"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Créé le"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valeur non standard"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nom affiché"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valeur supplémentaire"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Cet article est-il configurable?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Dernière modification le"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Dernière mise à jour par"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Dernière mise à jour le"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Les chaises de bureau peuvent endommager votre sol: protégez-le."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Option non disponible."
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Articles optionnels"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Les articles optionnels sont suggérés quand le client clique sur *Ajouter au"
+" Panier*"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Options"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Prix"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Liste de prix"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Article"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Image de l'article"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Modèle d'article"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variante d'article"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantité"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Supprimer"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Configurateur de produits pour la vente"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Ligne de bons de commande"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Sauvegarder"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Cette combinaison n'existe pas."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Ce produit n'a pas de combinaison existante"
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unité(s)"
diff --git a/addons/sale_product_configurator/i18n/he.po b/addons/sale_product_configurator/i18n/he.po
new file mode 100644
index 00000000..3127c1ba
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/he.po
@@ -0,0 +1,255 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Yihya Hugirat <hugirat@gmail.com>, 2020
+# ZVI BLONDER <ZVIBLONDER@gmail.com>, 2020
+# Ofir Blum <ofir.blum@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Ofir Blum <ofir.blum@gmail.com>, 2020\n"
+"Language-Team: Hebrew (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>סה\"כ:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "הוסף"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "הוסף אחד"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "ערכי תכונות"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "אפשרויות זמינות:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "חזור"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "בטל"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "מדבקות לרגלי כסא"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "הגדר"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "הגדר מוצר"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "אשר"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "נוצר על-ידי"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "נוצר ב-"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "ערכים מותאמים אישית"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "הצג שם"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "ערכים נוספים"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "תעודה מזהה"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "האם ניתן להגדיר את המוצר?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "שינוי אחרון ב"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "עודכן לאחרונה על-ידי"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "עדכון אחרון ב"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "כסאות משרדיים יכולים להזיק לרצפה שלך: הגן עליה."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "האפשרות אינה זמינה"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "מוצרים אופציונליים"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"מוצרים אופציונליים מוצעים בכל פעם שהלקוח לוחץ על *הוסף לעגלה* (אסטרטגיית "
+"קרוס-סל, למשל למחשבים: אחריות, תוכנה וכו ')."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "אפשרויות"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "מחיר"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "מחירון"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "מוצר"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "תמונת מוצר"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "תבנית מוצר "
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "וריאנט מוצר"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "כמות"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "הסר אחד"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "מגדיר מוצר מכירה"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "שורת הזמנת לקוח"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "שמור"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "שילוב זה אינו קיים."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "למוצר זה אין שילוב תקף."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "יחידה"
diff --git a/addons/sale_product_configurator/i18n/hi.po b/addons/sale_product_configurator/i18n/hi.po
new file mode 100644
index 00000000..59b9ba48
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/hi.po
@@ -0,0 +1,250 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Martin Trigaux, 2021\n"
+"Language-Team: Hindi (https://www.transifex.com/odoo/teams/41243/hi/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hi\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "जोड़ना"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "रद्द"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "सहेज"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/hr.po b/addons/sale_product_configurator/i18n/hr.po
new file mode 100644
index 00000000..6b85d3a0
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/hr.po
@@ -0,0 +1,259 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Vladimir Olujić <olujic.vladimir@storm.hr>, 2020
+# Ivica Dimjašević <ivica.dimjasevic@storm.hr>, 2020
+# Karolina Tonković <karolina.tonkovic@storm.hr>, 2020
+# Ana-Maria Olujić <ana-maria.olujic@slobodni-programi.hr>, 2020
+# Tina Milas, 2020
+# Bole <bole@dajmi5.com>, 2021
+# Hrvoje Sić <hrvoje.sic@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Hrvoje Sić <hrvoje.sic@gmail.com>, 2021\n"
+"Language-Team: Croatian (https://www.transifex.com/odoo/teams/41243/hr/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: hr\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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Ukupno:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Dodaj"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Dodaj jedan"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Vrijednosti značajki"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Natrag"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Odustani"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Postavke"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfiguriraj proizvod"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Potvrdi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Kreirao"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Kreirano"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Podesive vrijednosti"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Naziv"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Dodatne vrijednosti"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Da li je proizvod konfigurabilan?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Zadnja promjena"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Promijenio"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Vrijeme promjene"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Mogući proizvodi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Opcionalni proizvodi su predloženi kad god kupac klikne \"Dodaj u košaricu\""
+" (strategija križne prodaje, npr. za računala: jamstvo, programi itd.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opcije"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Cijena"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Cjenik"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Slika proizvoda"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Predložak proizvoda"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Varijanta proizvoda"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Količina"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Stavka prodajnog naloga"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Spremi"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Jedinice"
diff --git a/addons/sale_product_configurator/i18n/hu.po b/addons/sale_product_configurator/i18n/hu.po
new file mode 100644
index 00000000..3ea7d0af
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/hu.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2021
+# krnkris, 2021
+# Tamás Németh <ntomasz81@gmail.com>, 2021
+# gezza <geza.nagy@oregional.hu>, 2021
+# Kovács Tibor <kovika@gmail.com>, 2021
+# Ákos Nagy <akos.nagy@oregional.hu>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Ákos Nagy <akos.nagy@oregional.hu>, 2021\n"
+"Language-Team: Hungarian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Összesen:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Hozzáadás"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Hozzáadás"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Tulajdonság értékek"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Elérhető opciók:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Vissza"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Visszavonás"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Padlóvédő szék alá"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfigurálás"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Termék konfigurálása"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Megerősítés"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Létrehozta"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Létrehozva"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Egyedi értékek"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Név megjelenítése"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Extra értékek"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "Azonosító"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "A termék konfigurálható?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Legutóbb módosítva"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Frissítette"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Frissítve "
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Az irodai székek árthatnak a padlónak: védje meg."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Az opció nem elérhető"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Választható termékek"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"A választható termékek felkínálásra kerülnek amikor a vásárló leüti a "
+"*Kosárhoz adás* gombot (kereszt-értékesítés stratégia, pl. számítógépekhez: "
+"garancia, szoftver, stb.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Beállítások"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Ár"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Árlista"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Termék"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Termék képe"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Terméksablon"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Termékváltozat"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Mennyiség"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Eltávolítás"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Értékesítési termék konfigurátor"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Értékesítési rendelés sor"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Mentés"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Ez a kombináció nem létezik."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Ezen terméknek nincs érvényes kombinációja."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "egység"
diff --git a/addons/sale_product_configurator/i18n/id.po b/addons/sale_product_configurator/i18n/id.po
new file mode 100644
index 00000000..928ed3ed
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/id.po
@@ -0,0 +1,259 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Wahyu Setiawan <wahyusetiaaa@gmail.com>, 2020
+# oon arfiandwi <oon.arfiandwi@gmail.com>, 2020
+# Adam Damara <lorenzrenz@gmail.com>, 2020
+# Edy Kend <edy@azmall.co.id>, 2020
+# Muhammad Syarif <mhdsyarif.ms@gmail.com>, 2020
+# Hendra So <mask783@gmail.com>, 2020
+# Ryanto The <ry.the77@gmail.com>, 2020
+# Ikhsanul Wirsa <iwirsa02@outlook.co.id>, 2020
+# Abdul Munif Hanafi <amunifhanafi@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Abdul Munif Hanafi <amunifhanafi@gmail.com>, 2021\n"
+"Language-Team: Indonesian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Tambahkan"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Nilai-nilai Atribut"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Kembali"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Batal"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Atur"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfigurasikan sebuah produk"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Konfirmasi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Dibuat oleh"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Dibuat pada"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nama Tampilan"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Terakhir diubah pada"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Terakhir diperbarui oleh"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Terakhir diperbarui pada"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Pilihan produk"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opsi"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Harga"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Daftar Harga"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produk"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Gambar Produk"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Templete Produk"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Varian Produk"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kuantitas"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Detail Order Penjualan"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Simpan"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unit"
diff --git a/addons/sale_product_configurator/i18n/it.po b/addons/sale_product_configurator/i18n/it.po
new file mode 100644
index 00000000..05c093b2
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/it.po
@@ -0,0 +1,256 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Paolo Valier, 2020
+# Léonie Bouchat <lbo@odoo.com>, 2020
+# Sergio Zanchetta <primes2h@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>, 2021\n"
+"Language-Team: Italian (https://www.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=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totale:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Aggiungi"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Aggiungi unità"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valori attributo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opzioni disponibili:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Indietro"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Annulla"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Proteggi pavimento per sedia"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configura"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurazione prodotto"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Conferma"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Creato da"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Data creazione"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valori predefiniti"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nome visualizzato"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valori aggiuntivi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Il prodotto è configurabile?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Ultima modifica il"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Ultimo aggiornamento di"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Ultimo aggiornamento il"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Le sedie da ufficio possono danneggiare il pavimento: proteggilo."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opzione non disponibile"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Prodotti opzionali"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"I prodotti opzionali vengono suggeriti ogni volta che il cliente fa clic su "
+"*Aggiungi al carrello* (strategia di vendita incrociata, es. per i computer:"
+" garanzia, software ecc...)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opzioni"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Prezzo"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Listino prezzi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Prodotto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Immagine prodotto"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Modello prodotto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variante prodotto"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantità"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Rimuovi unità"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Configuratore prodotto per vendite"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Riga ordine di vendita"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Salva"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Questa combinazione non esiste."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Questo prodotto non ha combinazioni valide."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unità"
diff --git a/addons/sale_product_configurator/i18n/ja.po b/addons/sale_product_configurator/i18n/ja.po
new file mode 100644
index 00000000..9e84d974
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ja.po
@@ -0,0 +1,256 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Shunho Kin <s-kin@shonan-innovation.co.jp>, 2020
+# Martin Trigaux, 2020
+# Yoshi Tashiro <tashiro@roomsfor.hk>, 2020
+# 高木正勝 <masakatsu.takagi@pro-spire.co.jp>, 2020
+# Norimichi Sugimoto <norimichi.sugimoto@tls-ltd.co.jp>, 2020
+# Noma Yuki, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Noma Yuki, 2020\n"
+"Language-Team: Japanese (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>合計:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "追加"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "1つ追加"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "属性値"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "利用可能なオプション:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "戻る"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "取消"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "チェアマット"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "設定しましょう"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "プロダクトを構成"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "確認"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "作成者"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "作成日"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "表示名"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "最終更新日"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "最終更新者"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "最終更新日"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "オプションプロダクト"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"オプションの商品は、*カートに入れる*(クロスセル戦略、たとえばコンピュータの場合:保証、ソフトウェアなど)をクリックするたびに表示されます。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "オプション"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "価格"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "価格リスト"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "プロダクト"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "プロダクト画像"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "プロダクトテンプレート"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "プロダクトバリアント"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "数量"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "販売プロダクトコンフィギュレータ"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "販売オーダ明細"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "保存"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "この組み合わせは存在しません。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "このプロダクトには有効な組み合わせがありません。"
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "個"
diff --git a/addons/sale_product_configurator/i18n/ka.po b/addons/sale_product_configurator/i18n/ka.po
new file mode 100644
index 00000000..fccf0e94
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ka.po
@@ -0,0 +1,253 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Mari Khomeriki <mari.khomeriki@maxinai.com>, 2021
+# Martin Trigaux, 2021
+# Temur, 2021
+# Giorgi Melitauri <gmelitauri@live.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Giorgi Melitauri <gmelitauri@live.com>, 2021\n"
+"Language-Team: Georgian (https://www.transifex.com/odoo/teams/41243/ka/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ka\n"
+"Plural-Forms: nplurals=2; plural=(n!=1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "დამატება"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "უკან"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "გაუქმება"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "დამოწმება"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "შემქმნელი"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "შექმნის თარიღი"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "სახელი"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "იდენტიფიკატორი/ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "ბოლოს განახლებულია"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "ბოლოს განაახლა"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "ბოლოს განახლდა"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "ოფციები"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "ფასი"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "პროდუქტი"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "პროდუქტის შაბლონი"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "რაოდენობა"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "გაყიდვის ორდერის ხაზი"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "შენახვა"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/km.po b/addons/sale_product_configurator/i18n/km.po
new file mode 100644
index 00000000..e57cf9a7
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/km.po
@@ -0,0 +1,254 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Sengtha Chay <sengtha@gmail.com>, 2020
+# Samkhann Seang <seangsamkhann@gmail.com>, 2020
+# Lux Sok <sok.lux@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Lux Sok <sok.lux@gmail.com>, 2020\n"
+"Language-Team: Khmer (https://www.transifex.com/odoo/teams/41243/km/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: km\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>សរុប៖</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "បន្ថែម"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "បន្ថែមមួយ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "កំណត់គុណតម្លៃ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "មានជំរើស៖"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "ថយក្រោយ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "លុបចោល"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "ការការពារជាន់កៅអី"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "កំណត់ផ្លាស់ប្តូរ"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "កំណត់ផលិតផល"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "បញ្ជាក់"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "បង្កើតដោយ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "បង្កើតនៅ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "ឈ្មោះសំរាប់បង្ហាញ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "អត្តសញ្ញាណ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "កាលបរិច្ឆេតកែប្រែចុងក្រោយ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "ផ្លាស់ប្តូរចុងក្រោយ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "ផ្លាស់ប្តូរចុងក្រោយ"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "កៅអីការិយាល័យអាចបង្កគ្រោះថ្នាក់ដល់ជាន់របស់អ្នក៖ ការពារវា។"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "ជម្រើសមិនមានទេ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "ផលិតផលផ្សេងទៀត"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"ផលិតផលជម្រើសត្រូវបានណែនាំនៅពេលណាដែលអតិថិជនវាយ * បន្ថែមទៅកន្ត្រកទំនិញ * "
+"(យុទ្ធសាស្ត្រលក់ - ឧទាហរណ៏សម្រាប់កុំព្យូទ័រ៖ ការធានាផ្នែកទន់ជាដើម) ។"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "ជម្រើស"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "តម្លៃ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "តារាង​តំលៃ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "ផលិតផល"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "រូបភាពផលិតផល"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "គំរូផលិតផល"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "ការផ្លាស់ប្តូរផលិតផល"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "ចំនួន"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "យកមួយចេញ"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "អ្នកកំណត់រចនាសម្ព័ន្ធលក់ផលិតផល"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "លំដាប់បញ្ជាទិញ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "រក្សាទុក"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "ការរួមបញ្ចូលគ្នានេះមិនមានទេ។"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "ផលិតផលនេះមិនមានការរួមបញ្ចូលត្រឹមត្រូវទេ។"
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/ko.po b/addons/sale_product_configurator/i18n/ko.po
new file mode 100644
index 00000000..c0889a02
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ko.po
@@ -0,0 +1,254 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# JH CHOI <hwangtog@gmail.com>, 2020
+# Link Up링크업 <linkup.way@gmail.com>, 2020
+# Linkup <link-up@naver.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Linkup <link-up@naver.com>, 2020\n"
+"Language-Team: Korean (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>소계 :</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "추가"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "하나 추가하기"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "속성 값"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "사용 가능한 선택 사항 :"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "뒤로"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "취소"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "바닥 보호용 의자 덮개"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "구성"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "상품 구성"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "확인"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "작성자"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "작성일"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "맞춤 값"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "이름 표시"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "추가 값"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "제품 구성 여부"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "최근 수정"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "최근 갱신한 사람"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "최근 갱신 날짜"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "사무용 의자는 바닥을 손상시킬 수 있습니다 : 그것으로 보호합니다."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "사용할 수 없는 선택 사항"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "선택 제품"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"선택 제품은 고객이 *장바구니에 담기*(교차 판매 전략. 예 : 컴퓨터 구매 시 : 보증, 소프트웨어 등)를 누를 때마다 권장됩니다."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "옵션"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "가격"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "가격표"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "상품"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "상품 이미지"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "상품 양식"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "파생 상품"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "수량"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "하나만 제거하기"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "판매 상품 구성기"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "판매 주문 명세"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "저장"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "이 조합은 존재하지 않습니다."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "이 상품에는 유효한 조합이 없습니다."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "단위"
diff --git a/addons/sale_product_configurator/i18n/lb.po b/addons/sale_product_configurator/i18n/lb.po
new file mode 100644
index 00000000..5c8b1e93
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/lb.po
@@ -0,0 +1,220 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~12.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-09-09 12:18+0000\n"
+"PO-Revision-Date: 2019-08-26 09:14+0000\n"
+"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/lt.po b/addons/sale_product_configurator/i18n/lt.po
new file mode 100644
index 00000000..daf0cb8f
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/lt.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2021
+# UAB "Draugiški sprendimai" <transifex@draugiskisprendimai.lt>, 2021
+# Antanas Muliuolis <an.muliuolis@gmail.com>, 2021
+# Linas Versada <linaskrisiukenas@gmail.com>, 2021
+# Denis Knotko <denis_knotko@yahoo.com>, 2021
+# Jonas Zinkevicius <jozi@odoo.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Jonas Zinkevicius <jozi@odoo.com>, 2021\n"
+"Language-Team: Lithuanian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Suma:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Pridėti"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Pridėti vieną"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Atributų reikšmės"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Galimi pasirinkimai:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Grįžti"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Atšaukti"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Kėdės grindų apsauga"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfigūruoti"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfigūruoti produktą"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Patvirtinti"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Sukūrė"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Sukurta"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Tinkintos vertės"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Rodomas pavadinimas"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Papildomos vertės"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Paskutinį kartą keista"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Paskutinį kartą atnaujino"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Paskutinį kartą atnaujinta"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Biuro kėdės gali pažeisti jūsų grindis, apsaugokite jas."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Pasirinkimas negalimas"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Papildomi produktai"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Papildomi produktai siūlomi, kai vartotojas paspaudžia \"Pridėti į "
+"krepšelį\" (kryžminio pardavimo strategija, pvz., kompiuteriams tai gali "
+"būti garantija, programinė įranga ir t.t.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Pasirinkimai"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Kaina"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Kainoraštis"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produktas"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produkto paveikslėlis"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Produkto šablonas"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Produkto variantas"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Kiekis"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Pašalinti vieną"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Pardavimo produkto konfigūratorius"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Pardavimo užsakymo eilutė"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Išsaugoti"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Ši kombinacija neegzistuoja."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Šis produktas neturi galimų kombinacijų."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Vienetai"
diff --git a/addons/sale_product_configurator/i18n/lv.po b/addons/sale_product_configurator/i18n/lv.po
new file mode 100644
index 00000000..96ac8606
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/lv.po
@@ -0,0 +1,246 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Language-Team: Latvian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/mn.po b/addons/sale_product_configurator/i18n/mn.po
new file mode 100644
index 00000000..29a1ca26
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/mn.po
@@ -0,0 +1,256 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2020
+# Martin Trigaux, 2020
+# Minj P <pminj322@gmail.com>, 2020
+# Batmunkh Ganbat <batmunkh.g@bumanit.mn>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Batmunkh Ganbat <batmunkh.g@bumanit.mn>, 2020\n"
+"Language-Team: Mongolian (https://www.transifex.com/odoo/teams/41243/mn/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: mn\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Нийт:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Нэмэх"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Нэгийг нэмэх"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Шинж чанарын утгууд"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Боломжит сонголтууд:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Буцах"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Цуцлах"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Тохируулга"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Бараа тохируулах"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Илгээх"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Үүсгэсэн этгээд"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Үүсгэсэн огноо"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Дэлгэрэнгүй нэр"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Энэ барааны мэдээллийг өөрчлөх боломжтой юу?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Сүүлд зассан огноо"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Сүүлд зассан этгээд"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Сүүлд зассан огноо"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Оффисын сандал таны шалыг гэмтээж болно: сэргийлнэ үү."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Одоогоор сонголт алга"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Нэмж санал болгох бараа"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Захиалагч барааг \"Сагсанд нэмэх\" үед нэмэлт бараануудыг санал болгоно (энэ"
+" бол дагалдуулж зарах стратеги юм, ж.нь. компьютерийн хувьд: баталгаат "
+"хугацаа, програм хангамж, г.м)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Сонголтууд"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Үнэ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Үнийн хүснэгт"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Бараа"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Барааны зураг"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Барааны загвар"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Барааны хувилбар"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Тоо хэмжээ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Нэгийг хасах"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Тохируулдаг бараа борлуулах"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Борлуулалтын захиалгын мөр"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Хадгалах"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Энэ зохимж байхгүй байна."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Энэ бараанд боломжит зохимж алга."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Нэгж"
diff --git a/addons/sale_product_configurator/i18n/nb.po b/addons/sale_product_configurator/i18n/nb.po
new file mode 100644
index 00000000..93a5edbe
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/nb.po
@@ -0,0 +1,256 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Fredrik Ahlsen <fredrik@gdx.no>, 2020
+# Martin Trigaux, 2020
+# Jorunn D. Newth, 2020
+# Marius Stedjan <marius@stedjan.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2020\n"
+"Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: nb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr "Legg i handlekurv"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Legg til"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Legg til én"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Attributtverdier"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Tilbake"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfigurer"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Bekreft"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Opprettet av"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Opprettet"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Tilpassede verdier"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Visningsnavn"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Ekstra verdier"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Sist endret"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Sist oppdatert av"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Sist oppdatert"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Valgfrie produkter"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Valgfrie produkter blir foreslått når kunden legger noe til i handlevognen "
+"(cross-sell-strategi, for eksempel kan det for datamaskiner være ekstra "
+"garantitid, programvare, osv.)"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Valg"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Pris"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Prisliste"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produktbilde"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Produktmal"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Produktvariant"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Antall"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Fjern én"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Salgsordrelinje"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Lagre"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Denne kombinasjonen eksisterer ikke."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Dette produktet har ingen gyldige kombinasjoner."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Enheter"
diff --git a/addons/sale_product_configurator/i18n/nl.po b/addons/sale_product_configurator/i18n/nl.po
new file mode 100644
index 00000000..8b2615bb
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/nl.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Yenthe Van Ginneken <yenthespam@gmail.com>, 2020
+# dpms <pieter.van.de.wygaert@telenet.be>, 2020
+# Erwin van der Ploeg <erwin@odooexperts.nl>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Erwin van der Ploeg <erwin@odooexperts.nl>, 2020\n"
+"Language-Team: Dutch (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totaal:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Toevoegen"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Voeg één toe"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Kenmerkwaardes"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Beschikbare opties:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Terug"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Annuleren"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Stoel vloerbescherming"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configureren"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configureer een product"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Bevestigen"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Aangemaakt door"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Aangemaakt op"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Aangepaste waardes"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Schermnaam"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Extra waardes"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Is het product configureerbaar?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Laatst gewijzigd op"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Laatst bijgewerkt door"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Laatst bijgewerkt op"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Kantoorstoelen kunnen uw vloer beschadigingen: Bescherm deze."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Optie niet beschikbaar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Optionele producten"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Optionele producten worden voorgesteld wanneer de klant op de knop \"Voeg "
+"toe aan winkelmandje\" klikt (cross-selling strategie, bijv. garantie, "
+"software, etc.)"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opties"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Prijs"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Prijslijst"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Product"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Productafbeelding"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Productsjabloon"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Productvariant"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Hoeveelheid"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Verwijder één"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Verkoop productconfigurator"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Verkooporderregel"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Opslaan"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Deze combinatie bestaat niet."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Dit product heeft geen geldige combinatie."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Stuks"
diff --git a/addons/sale_product_configurator/i18n/pl.po b/addons/sale_product_configurator/i18n/pl.po
new file mode 100644
index 00000000..dbcfe285
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/pl.po
@@ -0,0 +1,265 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Judyta Kaźmierczak <judyta.kazmierczak@openglobe.pl>, 2020
+# Tadeusz Karpiński <tadeuszkarpinski@gmail.com>, 2020
+# Tomasz Leppich <t.leppich@gmail.com>, 2020
+# Piotr Szlązak <szlazakpiotr@gmail.com>, 2020
+# Slawomir Adamus <melthalion@gmail.com>, 2020
+# Marcin Młynarczyk <mlynarczyk@gmail.com>, 2020
+# Karol Rybak <karolrybak85@gmail.com>, 2020
+# Andrzej Donczew <a.donczew@hadron.eu.com>, 2020
+# Piotr Cierkosz <piotr.w.cierkosz@gmail.com>, 2020
+# Paweł Wodyński <pw@myodoo.pl>, 2020
+# Maja Stawicka <mjstwck@wp.pl>, 2020
+# Piotr Strębski <strebski@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Piotr Strębski <strebski@gmail.com>, 2021\n"
+"Language-Team: Polish (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Suma:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Dodaj"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Wartość atrybutu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Powrót"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Anuluj"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Ochrona podłogi na krzesło"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Konfiguruj"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Skonfiguruj product"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Potwierdź"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Utworzona przez"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Utworzono"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nazwa wyświetlana"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Data ostatniej modyfikacji"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Ostatnio aktualizowane przez"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Data ostatniej aktualizacji"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Produkty opcjonalne"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Produkty opcjonalne są sugerowane za każdym razem, gdy klient kliknie *Dodaj"
+" do koszyka* (strategia sprzedaży krzyżowej, np. dla komputerów: gwarancja, "
+"oprogramowanie itp.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opcje"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Kwota"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Cennik"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Obraz produktu"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Szablon produktu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Wariant produktu"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Ilość"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Usuń jeden"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Pozycja zamówienia sprzedaży"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Zapisz"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Ta kombinacja nie istnieje."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Jednostki"
diff --git a/addons/sale_product_configurator/i18n/pt.po b/addons/sale_product_configurator/i18n/pt.po
new file mode 100644
index 00000000..129ec5be
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/pt.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Ricardo Correia <rcorreiavv@gmail.com>, 2020
+# Manuela Silva <manuelarodsilva@gmail.com>, 2020
+# Pedro Castro Silva <pedrocs@exo.pt>, 2020
+# Nuno Silva <nuno.silva@arxi.pt>, 2020
+# Reinaldo Ramos <reinaldo.ramos@arxi.pt>, 2020
+# Marcelo Pereira <marcelo.pereira@arxi.pt>, 2020
+# Pedro Filipe <pedro2.10@hotmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Pedro Filipe <pedro2.10@hotmail.com>, 2020\n"
+"Language-Team: Portuguese (https://www.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=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Adicionar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Adicionar um"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valores de Atributo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Anterior"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configurar"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurar um Artigo"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Criado por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Criado em"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nome"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Última Modificação em"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Última Atualização por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Última Atualização em"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Produtos Opcionais"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opções"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Preço"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Lista de preços"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Artigo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagem do Artigo"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Modelo de Artigo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variante de Artigo"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantidade"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Remover um"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Linhas da Ordem de Vendas"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Guardar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/pt_BR.po b/addons/sale_product_configurator/i18n/pt_BR.po
new file mode 100644
index 00000000..f80ad1c9
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/pt_BR.po
@@ -0,0 +1,266 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Rodrigo de Almeida Sottomaior Macedo <rmsolucoeseminformatica@protonmail.com>, 2020
+# Rafael H L Moretti <rafael.moretti@gmail.com>, 2020
+# Martin Trigaux, 2020
+# Mateus Lopes <mateus1@gmail.com>, 2020
+# Luiz Carlos de Lima <luiz.carlos@akretion.com.br>, 2020
+# falexandresilva <falexandresilva@gmail.com>, 2020
+# grazziano <gra.negocia@gmail.com>, 2020
+# André Augusto Firmino Cordeiro <a.cordeito@gmail.com>, 2020
+# Silmar <pinheirosilmar@gmail.com>, 2020
+# Mateus Pinheiro <smateusbp@gmail.com>, 2020
+# Luiz Carareto Alonso <Luiz.cararetoalonso@gmail.com>, 2020
+# Marcel Savegnago <marcel.savegnago@gmail.com>, 2020
+# Luiz Fernando <lfpsgs@outlook.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Luiz Fernando <lfpsgs@outlook.com>, 2020\n"
+"Language-Team: Portuguese (Brazil) (https://www.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=2; plural=(n > 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Total:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Adicionar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Adicionar um"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valores do Atributo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opções Disponíveis:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Voltar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Proteção de piso para cadeiras"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configurar"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurar um produto"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Criado por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Criado em"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valores Personalizados"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nome exibido"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valores Extras"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Este é um produto configurável?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Última modificação em"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Última atualização por"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Última atualização em"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Cadeiras de escritório podem prejudicar seu piso: proteja-o."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opção não disponível"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Produtos Opcionais"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Produtos opcionais são sugeridos sempre que o cliente clica *Adicionar ao "
+"Carrinho* (estratégia de venda cruzada, por exemplo, para computadores: "
+"garantia, software, etc.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opções"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Preço"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Lista de Preço"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagem do Produto"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Modelo de Produto"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variação do Produto"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Quantidade"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Remova um"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Configurador de Produtos de Venda"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Linha do pedido de vendas"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Salvar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Essa combinação não existe."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Este produto não tem uma combinação válida."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Unidades"
diff --git a/addons/sale_product_configurator/i18n/ro.po b/addons/sale_product_configurator/i18n/ro.po
new file mode 100644
index 00000000..2d86d9a4
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ro.po
@@ -0,0 +1,255 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Fekete Mihai <mihai.fekete@forestandbiomass.ro>, 2020
+# Cozmin Candea <office@terrabit.ro>, 2020
+# Foldi Robert <foldirobert@nexterp.ro>, 2020
+# Dorin Hongu <dhongu@gmail.com>, 2020
+# Hongu Cosmin <cosmin513@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Hongu Cosmin <cosmin513@gmail.com>, 2020\n"
+"Language-Team: Romanian (https://www.transifex.com/odoo/teams/41243/ro/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ro\n"
+"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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\"/>Adaugă în coș"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong> Total: </strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Adaugă"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Adaugă"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Valori atribute"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Opțiuni disponibile:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Înapoi"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Anulează"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Protecție podea scaun"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Configurare"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Configurați un produs"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Confirmă"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Creat de"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Creat în"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Valori personalizate"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Nume afișat"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Valori Extra"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Produsul poate fi configurat?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Ultima modificare la"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Ultima actualizare făcută de"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Ultima actualizare pe"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Opțiune indisponibilă"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Produse opționale"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Opțiuni"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Preț"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Listă de prețuri"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produs"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Imagine produs"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Șablon produs"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variantă produs"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Cantitate"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Eliminați unu"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Configurator produs de vânzare"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Linie comandă vânzare"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Salvează"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Această combinație nu există."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Acest produs nu are nici o combinație de atribute validă."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "buc"
diff --git a/addons/sale_product_configurator/i18n/ru.po b/addons/sale_product_configurator/i18n/ru.po
new file mode 100644
index 00000000..428b9cac
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ru.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Ivan Yelizariev <yelizariev@it-projects.info>, 2020
+# ILMIR <karamov@it-projects.info>, 2020
+# Oleg Kuryan <oleg@ventor.tech>, 2020
+# Irina Fedulova <istartlin@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Irina Fedulova <istartlin@gmail.com>, 2020\n"
+"Language-Team: Russian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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\"/>Добавить в корзину</i>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Итого:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Добавить"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Добавить один"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Значение атрибута"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Доступные функции:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Назад"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Отменить"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Защита пола от стула"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Настроить"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "настроить товар"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Подтвердить"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Создал"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Создан"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Отображаемое имя"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "Идентификатор"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Последнее изменение"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Последний раз обновил"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Последнее обновление"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Офисные стулья могут повредить вашему полу: защитите ее."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Функция недоступна"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Дополнительные товары"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Дополнительные продукты предлагаются всякий раз, когда клиент попадает "
+"*Добавить в корзину * (стратегия кросс-продаж, например, для компьютеров: "
+"гарантия, программное обеспечение и т.д.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Параметры"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Цена"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Прайс"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Продукт"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Изображения продукта "
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Шаблон продукта"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Вариант продукта"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Количество"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Удалить один"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Конфигуратор товара продажи"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Строка заказа на продажу"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Сохранить"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Такая комбинация не существует"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Этот товар не имеет действительной комбинации."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Единицы"
diff --git a/addons/sale_product_configurator/i18n/sale_product_configurator.pot b/addons/sale_product_configurator/i18n/sale_product_configurator.pot
new file mode 100644
index 00000000..80ea7934
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/sale_product_configurator.pot
@@ -0,0 +1,246 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-29 13:46+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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/si.po b/addons/sale_product_configurator/i18n/si.po
new file mode 100644
index 00000000..6a49fb5e
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/si.po
@@ -0,0 +1,246 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Language-Team: Sinhala (https://www.transifex.com/odoo/teams/41243/si/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: si\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/sk.po b/addons/sale_product_configurator/i18n/sk.po
new file mode 100644
index 00000000..f3122252
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/sk.po
@@ -0,0 +1,257 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Matus Krnac <matus.krnac@gmail.com>, 2020
+# Jaroslav Bosansky <jaro.bosansky@ekoenergo.sk>, 2020
+# Jan Prokop, 2020
+# Radoslav Sloboda <rado.sloboda@gmail.com>, 2020
+# Rastislav Brencic <rastislav.brencic@azet.sk>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Rastislav Brencic <rastislav.brencic@azet.sk>, 2020\n"
+"Language-Team: Slovak (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Celkom:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Pridať"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Pridaj jeden"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Hodnoty atribútu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Dostupné možnosti:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Späť"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Zrušené"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Ochrana podlahy pre stoličky"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Nakonfigurovať"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Konfigurovať produkt"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Potvrdiť"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Vytvoril"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Vytvorené"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Vlastné hodnoty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Zobrazovaný názov"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Mimoriadne hodnoty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Je produkt konfigurovateľný?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Posledná úprava"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Naposledy upravoval"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Naposledy upravované"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Kancelárske stoličky môžu poškodiť vašu podlahu: chráňte ju."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Možnosť nie je k dispozícii"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Voliteľné produkty"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Doplnkové produkty sú ponúkané akonáhle zákazník zvolí *Vlož do košíka* "
+"(stratégia cross-sell, napr. pre počítače: záruka, software apod.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Možnosti"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Cena"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Cenník"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Obrázok produktu"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Šablóna produktu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Varianta produktu"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Množstvo"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Odstráň jednu"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Konfigurátor produktov predaja"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Položka objednávok"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Uložiť"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Táto kombinácia neexistuje."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Tento produkt nemá platnú kombináciu."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "kusy"
diff --git a/addons/sale_product_configurator/i18n/sl.po b/addons/sale_product_configurator/i18n/sl.po
new file mode 100644
index 00000000..ab16f7ab
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/sl.po
@@ -0,0 +1,257 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2021
+# Matjaz Mozetic <m.mozetic@matmoz.si>, 2021
+# Vida Potočnik <vida.potocnik@mentis.si>, 2021
+# laznikd <laznik@mentis.si>, 2021
+# matjaz k <matjaz@mentis.si>, 2021
+# Grega Vavtar <grega@hbs.si>, 2021
+# Tadej Lupšina <tadej@hbs.si>, 2021
+# Jasmina Macur <jasmina@hbs.si>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Jasmina Macur <jasmina@hbs.si>, 2021\n"
+"Language-Team: Slovenian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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 voziček"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Skupaj:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Dodaj"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Dodajte ga"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Vrednosti atributov"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Nazaj"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Prekliči"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Nastavi"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Nastavi proizvod"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Potrdi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Ustvaril"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Ustvarjeno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Prikazani naziv"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Zadnjič spremenjeno"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Zadnji posodobil"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Zadnjič posodobljeno"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Opcijski proizvodi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Možnosti"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Cena"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Cenik"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Proizvod"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Slika izdelka"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Predloga izdelka"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Različica proizvoda"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Količina"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Postavka prodajnega naloga"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Shrani"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/sv.po b/addons/sale_product_configurator/i18n/sv.po
new file mode 100644
index 00000000..3a69b3ed
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/sv.po
@@ -0,0 +1,254 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Kristoffer Grundström <lovaren@gmail.com>, 2021
+# Martin Trigaux, 2021
+# Anders Wallenquist <anders.wallenquist@vertel.se>, 2021
+# Haojun Zou <apollo_zhj@msn.com>, 2021
+# Kim Asplund <kim.asplund@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Kim Asplund <kim.asplund@gmail.com>, 2021\n"
+"Language-Team: Swedish (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Totalt:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Lägg till"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Lägg till en"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Attributvärden"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Tillbaka"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Ställ in"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Bekräfta"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Skapad av"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Skapad den"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Visningsnamn"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Senast redigerad"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Senast uppdaterad av"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Senast uppdaterad"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Optioner"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Optioner"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Pris"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Prislista"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Produkt"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Produkt Bild"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Produktmall"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Variant"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Antal"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Tabort en"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Orderrad"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Spara"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Kombinationen existerar inte."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Enheter"
diff --git a/addons/sale_product_configurator/i18n/th.po b/addons/sale_product_configurator/i18n/th.po
new file mode 100644
index 00000000..752300c7
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/th.po
@@ -0,0 +1,254 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Khwunchai Jaengsawang <khwunchai.j@ku.th>, 2020
+# monchai7 <montchye@gmail.com>, 2020
+# Potsawat Manuthamathorn <firmpotsawat@hotmail.com>, 2020
+# Odoo Thaidev <odoothaidev@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Odoo Thaidev <odoothaidev@gmail.com>, 2021\n"
+"Language-Team: Thai (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>ทั้งหมด:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "เพิ่ม"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "ค่าคุณลักษณะ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "กลับ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "ยกเลิก"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "ตั้งค่า"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "ยืนยัน"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "สร้างโดย"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "สร้างเมื่อ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "ชื่อที่ใช้แสดง"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "รหัส"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "แก้ไขครั้งสุดท้ายเมื่อ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "อัพเดทครั้งสุดท้ายโดย"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "อัพเดทครั้งสุดท้ายเมื่อ"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "ตัวเลือก"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "ราคา"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "รายการราคา"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "สินค้า"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "รูปภาพสินค้า"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "รูปแบบสินค้า"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "ความหลากหลายในสินค้า"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "จำนวน"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "รายการคำสั่งขาย"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "บันทึก"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "หน่วย"
diff --git a/addons/sale_product_configurator/i18n/tr.po b/addons/sale_product_configurator/i18n/tr.po
new file mode 100644
index 00000000..ce45b990
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/tr.po
@@ -0,0 +1,265 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Levent Karakaş <levent@mektup.at>, 2020
+# Murat Kaplan <muratk@projetgrup.com>, 2020
+# Güven YILMAZ <guvenyilmaz@outlook.com.tr>, 2020
+# Ertuğrul Güreş <ertugrulg@projetgrup.com>, 2020
+# Mehmet Demirel <mdemirell@gmail.com>, 2020
+# Ramiz Deniz Öner <deniz@denizoner.com>, 2020
+# Umur Akın <umura@projetgrup.com>, 2020
+# Ugur Yilmaz <ugurlu2001@hotmail.com>, 2020
+# abc Def <hdogan1974@gmail.com>, 2020
+# Ediz Duman <neps1192@gmail.com>, 2020
+# Tugay Hatıl <tugayh@projetgrup.com>, 2020
+# Murat Durmuş <muratd@projetgrup.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Murat Durmuş <muratd@projetgrup.com>, 2020\n"
+"Language-Team: Turkish (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Toplam:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Ekle"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Ekle"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Nitelik Değerleri"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Mevcut Seçenekler:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Geri"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "İptal et"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Sandalye zemini koruması"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Yapılandır"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Bir Ürün Yapılandır"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Onayla"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Oluşturan"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Oluşturulma"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Özel Değerler"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Görünüm Adı"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Ekstra Değerler"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Ürün yapılandırılabilir mi?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Son Düzenleme"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Son Güncelleyen"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Son Güncelleme"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Ofis koltukları zemine zarar verebilir: koruyun."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Seçenek mevcut değil"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Tamamlayıcı Ürünler"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Tamamlayıcı Ürünler, müşteriye her \"Sepete Ekle\" butonuna tıkladığında "
+"önerilir (Çapraz satış stratejisi, ör. Bilgisayarlar için: garanti, yazılım,"
+" vb.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Seçenekler"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Fiyat"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Fiyat Listesi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Ürün"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Ürün Görseli"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Ürün Şablonu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Ürün Varyantı"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Miktar"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Birini kaldır"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Satılık Ürün Konfigüratörü"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Satış Sipariş Satırı"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Kaydet"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Bu kombinasyon mevcut değil."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Bu ürünün geçerli bir kombinasyonu yok."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Adet"
diff --git a/addons/sale_product_configurator/i18n/uk.po b/addons/sale_product_configurator/i18n/uk.po
new file mode 100644
index 00000000..ed0fd5f6
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/uk.po
@@ -0,0 +1,255 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Bohdan Lisnenko, 2020
+# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2020\n"
+"Language-Team: Ukrainian (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Всього:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Додати"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Додати один"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Значення атрибутів"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Доступні функції:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Назад"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Скасувати"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Захист підлоги від стільця"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Налаштувати"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Налаштувати товар"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Підтвердити"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Створив"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Створено на"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Спеціальні значення"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Відобразити назву"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Додаткові значення"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Чи є цей товар налаштовуваним?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Останні зміни на"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Востаннє оновив"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Останнє оновлення"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Офісні стільці можуть зашкодити вашій підлозі: захистіть її."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Функція недоступна"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Додаткові товари"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Необов'язкові товари пропонуються кожного разу, коли клієнт натискає "
+"\"Додати в кошик\" (стратегія крос-продажів, наприклад, для комп'ютерів: "
+"гарантія, програмне забезпечення тощо)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Опції"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Ціна"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Прайс-лист"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Товар"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Зображення товару"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Шаблон товару"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Варіант товару"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Кількість"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Вилучити один"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Конфігуратор товару продажу"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Рядок замовлення на продаж"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Зберегти"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Цієї комбінації не існує."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Цей товар не має дійсної комбінації."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Одиниці"
diff --git a/addons/sale_product_configurator/i18n/ur.po b/addons/sale_product_configurator/i18n/ur.po
new file mode 100644
index 00000000..93b088b2
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/ur.po
@@ -0,0 +1,246 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Language-Team: Urdu (https://www.transifex.com/odoo/teams/41243/ur/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: ur\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "<i class=\"fa fa-shopping-cart add-optionnal-item\"/> Add to cart"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr ""
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr ""
diff --git a/addons/sale_product_configurator/i18n/vi.po b/addons/sale_product_configurator/i18n/vi.po
new file mode 100644
index 00000000..bcf1e353
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/vi.po
@@ -0,0 +1,258 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# Duy BQ <duybq86@gmail.com>, 2020
+# Dung Nguyen Thi <dungnt@trobz.com>, 2020
+# Nancy Momoland <thanhnguyen.icsc@gmail.com>, 2020
+# Trinh Tran Thi Phuong <trinhttp@trobz.com>, 2020
+# Trần Hà <tranthuha13590@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Trần Hà <tranthuha13590@gmail.com>, 2021\n"
+"Language-Team: Vietnamese (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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ỏ"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>Tổng:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "Thêm"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "Thêm một sản phẩm"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "Giá trị thuộc tính"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "Tuỳ chọn khả dụng:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "Quay lại"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "Hủy"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "Bọc chân ghế"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "Cấu hình"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "Cài đặt một sản phẩm"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "Xác nhận"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "Tạo bởi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "Thời điểm tạo"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "Custom Values"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "Tên hiển thị"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "Extra Values"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "Is the product configurable?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "Sửa lần cuối vào"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "Cập nhật lần cuối bởi"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "Cập nhật lần cuối vào"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "Ghế văn phòng có thể gây hại cho sàn nhà của bạn: bảo vệ nó."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "Tùy chọn không hỗ trợ"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "Sản phẩm Tuỳ chọn"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr ""
+"Sản phẩm tùy chọn được đề xuất bất cứ khi nào khách hàng nhấn *Thêm vào giỏ "
+"hàng* (chiến lược bán chéo, ví dụ: đối với máy tính: bảo hành, phần mềm, "
+"v.v.)."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "Tùy chọn"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "Giá"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "Bảng giá"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "Sản phẩm"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "Ảnh sản phẩm"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "Mẫu sản phẩm"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "Biến thể sản phẩm"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "Số lượng"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "Xóa"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "Bộ cấu hình sản phẩm"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "Chi tiết đơn hàng"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "Lưu"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "Sự kết hợp này không tồn tại."
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "Sản phẩm này không thể kết hợp."
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "Cái"
diff --git a/addons/sale_product_configurator/i18n/zh_CN.po b/addons/sale_product_configurator/i18n/zh_CN.po
new file mode 100644
index 00000000..a689cb26
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/zh_CN.po
@@ -0,0 +1,259 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# Martin Trigaux, 2020
+# liAnGjiA <liangjia@qq.com>, 2020
+# e2f_cn c5 <jarvisn@ecinnovations.com>, 2020
+# 黎伟杰 <674416404@qq.com>, 2020
+# 敬雲 林 <chingyun@yuanchih-consult.com>, 2020
+# ChinaMaker <liuct@chinamaker.net>, 2020
+# Felix Yang - Elico Corp <felixyangsh@aliyun.com>, 2020
+# guohuadeng <guohuadeng@hotmail.com>, 2020
+# snow wang <147156565@qq.com>, 2020
+# Jeffery CHEN Fan <jeffery9@gmail.com>, 2021
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: Jeffery CHEN Fan <jeffery9@gmail.com>, 2021\n"
+"Language-Team: Chinese (China) (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>总计:</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "添加"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "添加一行"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "属性值"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "有效选项:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "回退"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "取消"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "椅子地板保护"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "设置"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "配置产品"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "确认"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "创建人"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "创建时间"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "自定义值"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "显示名称"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "附加值"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr ""
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "最后修改日"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "最后更新人"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "最后更新时间"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "办公椅会伤害你的地板:保护它。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "选项无效"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "可选产品"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr "每当客户点击 * 加入购物车 *,就会出现建议的可选产品(交叉销售策略,例如,就电脑而言:保修、配套软件等)。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "选项"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "价格"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "价格表"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "产品"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "产品图片"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "产品模板"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "产品变体"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "数量"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "移除一行"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "销售产品配置器"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "销售订单行"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "保存"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "此组合不存在。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "此产品没有有效的组合。"
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "件"
diff --git a/addons/sale_product_configurator/i18n/zh_TW.po b/addons/sale_product_configurator/i18n/zh_TW.po
new file mode 100644
index 00000000..22ba234e
--- /dev/null
+++ b/addons/sale_product_configurator/i18n/zh_TW.po
@@ -0,0 +1,250 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * sale_product_configurator
+#
+# Translators:
+# 敬雲 林 <chingyun@yuanchih-consult.com>, 2020
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 14.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2020-09-29 13:46+0000\n"
+"PO-Revision-Date: 2020-09-07 08:18+0000\n"
+"Last-Translator: 敬雲 林 <chingyun@yuanchih-consult.com>, 2020\n"
+"Language-Team: Chinese (Taiwan) (https://www.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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db: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: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "<strong>Total:</strong>"
+msgstr "<strong>總計</strong>"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Add"
+msgstr "增加"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Add one"
+msgstr "添加一行"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_attribute_value_ids
+msgid "Attribute Values"
+msgstr "屬性值"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Available Options:"
+msgstr "可用選項:"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Back"
+msgstr "返回"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Cancel"
+msgstr "取消"
+
+#. module: sale_product_configurator
+#: model:product.template,name:sale_product_configurator.product_product_1_product_template
+msgid "Chair floor protection"
+msgstr "椅子地板保護"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Configure"
+msgstr "設定"
+
+#. module: sale_product_configurator
+#: model:ir.actions.act_window,name:sale_product_configurator.sale_product_configurator_action
+msgid "Configure a product"
+msgstr "配置產品"
+
+#. module: sale_product_configurator
+#. openerp-web
+#: code:addons/sale_product_configurator/static/src/js/product_configurator_controller.js:0
+#, python-format
+msgid "Confirm"
+msgstr "確認"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_uid
+msgid "Created by"
+msgstr "創立者"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__create_date
+msgid "Created on"
+msgstr "建立於"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_custom_attribute_value_ids
+msgid "Custom Values"
+msgstr "客製數值"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__display_name
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__display_name
+msgid "Display Name"
+msgstr "顯示名稱"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_no_variant_attribute_value_ids
+msgid "Extra Values"
+msgstr "額外數值"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__id
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__id
+msgid "ID"
+msgstr "ID"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__is_configurable_product
+msgid "Is the product configurable?"
+msgstr "產品是否可配置?"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line____last_update
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator____last_update
+msgid "Last Modified on"
+msgstr "最後修改於"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_uid
+msgid "Last Updated by"
+msgstr "最後更新者"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__write_date
+msgid "Last Updated on"
+msgstr "最後更新於"
+
+#. module: sale_product_configurator
+#: model:product.template,description_sale:sale_product_configurator.product_product_1_product_template
+msgid "Office chairs can harm your floor: protect it."
+msgstr "辦公椅可能會損害你的地板。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Option not available"
+msgstr "選項不可用"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,field_description:sale_product_configurator.field_product_template__optional_product_ids
+msgid "Optional Products"
+msgstr "可選產品"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,help:sale_product_configurator.field_product_product__optional_product_ids
+#: model:ir.model.fields,help:sale_product_configurator.field_product_template__optional_product_ids
+msgid ""
+"Optional Products are suggested whenever the customer hits *Add to Cart* "
+"(cross-sell strategy, e.g. for computers: warranty, software, etc.)."
+msgstr "每當客戶點選 * 加入購物車 *,就會出現建議的可選產品(交叉銷售策略,例如,就電腦而言:保修、軟體等)。"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form
+msgid "Options"
+msgstr "選項"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Price"
+msgstr "價格"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__pricelist_id
+msgid "Pricelist"
+msgstr "價格表"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__product_template_id
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Product"
+msgstr "商品"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Product Image"
+msgstr "產品圖片"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_product_template
+msgid "Product Template"
+msgstr "產品模板"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form
+msgid "Product Variant"
+msgstr "產品變體"
+
+#. module: sale_product_configurator
+#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_product_configurator__quantity
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+msgid "Quantity"
+msgstr "數量"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure_optional_products
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.optional_product_items
+msgid "Remove one"
+msgstr "刪除一行"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_product_configurator
+msgid "Sale Product Configurator"
+msgstr "銷售產品配置器"
+
+#. module: sale_product_configurator
+#: model:ir.model,name:sale_product_configurator.model_sale_order_line
+msgid "Sales Order Line"
+msgstr "銷售訂單明細"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_product_configurator_view_form
+msgid "Save"
+msgstr "儲存"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This combination does not exist."
+msgstr "此組合不存在"
+
+#. module: sale_product_configurator
+#: model_terms:ir.ui.view,arch_db:sale_product_configurator.configure
+msgid "This product has no valid combination."
+msgstr "本產品沒有有效的組合"
+
+#. module: sale_product_configurator
+#: model:product.template,uom_name:sale_product_configurator.product_product_1_product_template
+msgid "Units"
+msgstr "單位"
diff --git a/addons/sale_product_configurator/models/__init__.py b/addons/sale_product_configurator/models/__init__.py
new file mode 100644
index 00000000..3873985e
--- /dev/null
+++ b/addons/sale_product_configurator/models/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+
+from . import sale_order_line
+from . import product
diff --git a/addons/sale_product_configurator/models/product.py b/addons/sale_product_configurator/models/product.py
new file mode 100644
index 00000000..9fea6201
--- /dev/null
+++ b/addons/sale_product_configurator/models/product.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models, api
+
+
+class ProductTemplate(models.Model):
+ _inherit = 'product.template'
+ _check_company_auto = True
+
+ optional_product_ids = fields.Many2many(
+ 'product.template', 'product_optional_rel', 'src_id', 'dest_id',
+ string='Optional Products', help="Optional Products are suggested "
+ "whenever the customer hits *Add to Cart* (cross-sell strategy, "
+ "e.g. for computers: warranty, software, etc.).", check_company=True)
+
+ @api.depends('attribute_line_ids.value_ids.is_custom', 'attribute_line_ids.attribute_id.create_variant')
+ def _compute_has_configurable_attributes(self):
+ """ A product is considered configurable if:
+ - It has dynamic attributes
+ - It has any attribute line with at least 2 attribute values configured
+ - It has at least one custom attribute value """
+ for product in self:
+ product.has_configurable_attributes = any(attribute.create_variant == 'dynamic' for attribute in product.mapped('attribute_line_ids.attribute_id')) \
+ or any(len(attribute_line_id.value_ids) >= 2 for attribute_line_id in product.attribute_line_ids) \
+ or any(attribute_value.is_custom for attribute_value in product.mapped('attribute_line_ids.value_ids'))
+
+ def get_single_product_variant(self):
+ """ Method used by the product configurator to check if the product is configurable or not.
+
+ We need to open the product configurator if the product:
+ - is configurable (see has_configurable_attributes)
+ - has optional products """
+ self.ensure_one()
+ res = super(ProductTemplate, self).get_single_product_variant()
+ if res.get('product_id', False):
+ has_optional_products = False
+ for optional_product in self.product_variant_id.optional_product_ids:
+ if optional_product.has_dynamic_attributes() or optional_product._get_possible_variants(self.product_variant_id.product_template_attribute_value_ids):
+ has_optional_products = True
+ break
+ res.update({'has_optional_products': has_optional_products})
+ return res
diff --git a/addons/sale_product_configurator/models/sale_order_line.py b/addons/sale_product_configurator/models/sale_order_line.py
new file mode 100644
index 00000000..62d613a9
--- /dev/null
+++ b/addons/sale_product_configurator/models/sale_order_line.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import fields, models
+
+
+class SaleOrderLine(models.Model):
+ _inherit = "sale.order.line"
+
+ is_configurable_product = fields.Boolean('Is the product configurable?', related="product_template_id.has_configurable_attributes")
+ product_template_attribute_value_ids = fields.Many2many(related='product_id.product_template_attribute_value_ids', readonly=True)
diff --git a/addons/sale_product_configurator/security/ir.model.access.csv b/addons/sale_product_configurator/security/ir.model.access.csv
new file mode 100644
index 00000000..1c8e002c
--- /dev/null
+++ b/addons/sale_product_configurator/security/ir.model.access.csv
@@ -0,0 +1,2 @@
+"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink"
+"access_sale_product_configurator","access.sale.product.configurator","model_sale_product_configurator","sales_team.group_sale_salesman",1,1,1,0
diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_controller.js b/addons/sale_product_configurator/static/src/js/product_configurator_controller.js
new file mode 100644
index 00000000..008e6e65
--- /dev/null
+++ b/addons/sale_product_configurator/static/src/js/product_configurator_controller.js
@@ -0,0 +1,313 @@
+odoo.define('sale_product_configurator.ProductConfiguratorFormController', function (require) {
+"use strict";
+
+var core = require('web.core');
+var _t = core._t;
+var FormController = require('web.FormController');
+var OptionalProductsModal = require('sale_product_configurator.OptionalProductsModal');
+
+var ProductConfiguratorFormController = FormController.extend({
+ custom_events: _.extend({}, FormController.prototype.custom_events, {
+ field_changed: '_onFieldChanged',
+ handle_add: '_handleAdd'
+ }),
+ /**
+ * @override
+ */
+ start: function () {
+ var self = this;
+ return this._super.apply(this, arguments).then(function () {
+ self.$el.addClass('o_product_configurator');
+ });
+ },
+ /**
+ * We need to first load the template of the selected product and then render the content
+ * to avoid a flicker when the modal is opened.
+ *
+ * @override
+ */
+ willStart: function () {
+ var def = this._super.apply(this, arguments);
+ if (this.initialState.data.product_template_id) {
+ return this._configureProduct(
+ this.initialState.data.product_template_id.data.id
+ ).then(function () {
+ return def;
+ });
+ }
+
+ return def;
+ },
+ /**
+ * Showing this window is useless for configuratorMode 'options' as this form view
+ * is used as a bridge between SO lines and optional products.
+ *
+ * Placed here because it's the only method that is called after the modal is rendered.
+ *
+ * @override
+ */
+ renderButtons: function () {
+ this._super.apply(this, arguments);
+
+ if (this.renderer.state.context.configuratorMode === 'options') {
+ this.$el.closest('.modal').addClass('d-none');
+ }
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+
+ /**
+ * We need to override the default click behavior for our "Add" button
+ * because there is a possibility that this product has optional products.
+ * If so, we need to display an extra modal to choose the options.
+ *
+ * @override
+ */
+ _onButtonClicked: function (event) {
+ if (event.stopPropagation) {
+ event.stopPropagation();
+ }
+ var attrs = event.data.attrs;
+ if (attrs.special === 'cancel') {
+ this._super.apply(this, arguments);
+ } else {
+ if (!this.$el
+ .parents('.modal')
+ .find('.o_sale_product_configurator_add')
+ .hasClass('disabled')) {
+ this._handleAdd();
+ }
+ }
+ },
+ /**
+ * This is overridden to allow catching the "select" event on our product template select field.
+ *
+ * @override
+ * @private
+ */
+ _onFieldChanged: function (event) {
+ this._super.apply(this, arguments);
+
+ var self = this;
+ var productId = event.data.changes.product_template_id.id;
+
+ // check to prevent traceback when emptying the field
+ if (!productId) {
+ return;
+ }
+
+ this._configureProduct(event.data.changes.product_template_id.id)
+ .then(function () {
+ self.renderer.renderConfigurator(self.renderer.configuratorHtml);
+ });
+ },
+
+ /**
+ * Renders the "variants" part of the wizard
+ *
+ * @param {integer} productTemplateId
+ */
+ _configureProduct: function (productTemplateId) {
+ var self = this;
+ var initialProduct = this.initialState.data.product_template_id;
+ var changed = initialProduct && initialProduct.data.id !== productTemplateId;
+ var data = this.renderer.state.data;
+ return this._rpc({
+ route: '/sale_product_configurator/configure',
+ params: {
+ product_template_id: productTemplateId,
+ pricelist_id: this.renderer.pricelistId,
+ add_qty: data.quantity,
+ product_template_attribute_value_ids: changed ? [] : this._getAttributeValueIds(
+ data.product_template_attribute_value_ids
+ ),
+ product_no_variant_attribute_value_ids: changed ? [] : this._getAttributeValueIds(
+ data.product_no_variant_attribute_value_ids
+ )
+ }
+ }).then(function (configurator) {
+ self.renderer.configuratorHtml = configurator;
+ });
+ },
+ /**
+ * When the user adds a product that has optional products, we need to display
+ * a window to allow the user to choose these extra options.
+ *
+ * This will also create the product if it's in "dynamic" mode
+ * (see product_attribute.create_variant)
+ *
+ * If "self.renderer.state.context.configuratorMode" is 'edit', this will only send
+ * the main product with its changes.
+ *
+ * As opposed to the 'add' mode that will add the main product AND all the configured optional products.
+ *
+ * A third mode, 'options', is available for products that don't have a configuration but have
+ * optional products to select. This will bypass the configuration step and open the
+ * options modal directly.
+ *
+ * @private
+ */
+ _handleAdd: function () {
+ var self = this;
+ var $modal = this.$el;
+ var productSelector = [
+ 'input[type="hidden"][name="product_id"]',
+ 'input[type="radio"][name="product_id"]:checked'
+ ];
+
+ var productId = parseInt($modal.find(productSelector.join(', ')).first().val(), 10);
+ var productTemplateId = $modal.find('.product_template_id').val();
+ this.renderer.selectOrCreateProduct(
+ $modal,
+ productId,
+ productTemplateId,
+ false
+ ).then(function (productId) {
+ $modal.find(productSelector.join(', ')).val(productId);
+
+ var variantValues = self
+ .renderer
+ .getSelectedVariantValues($modal.find('.js_product'));
+
+ var productCustomVariantValues = self
+ .renderer
+ .getCustomVariantValues($modal.find('.js_product'));
+
+ var noVariantAttributeValues = self
+ .renderer
+ .getNoVariantAttributeValues($modal.find('.js_product'));
+
+ self.rootProduct = {
+ product_id: productId,
+ product_template_id: parseInt(productTemplateId),
+ quantity: parseFloat($modal.find('input[name="add_qty"]').val() || 1),
+ variant_values: variantValues,
+ product_custom_attribute_values: productCustomVariantValues,
+ no_variant_attribute_values: noVariantAttributeValues
+ };
+
+ if (self.renderer.state.context.configuratorMode === 'edit') {
+ // edit mode only takes care of main product
+ self._onAddRootProductOnly();
+ return;
+ }
+
+ self.optionalProductsModal = new OptionalProductsModal($('body'), {
+ rootProduct: self.rootProduct,
+ pricelistId: self.renderer.pricelistId,
+ okButtonText: _t('Confirm'),
+ cancelButtonText: _t('Back'),
+ title: _t('Configure'),
+ context: self.initialState.context,
+ previousModalHeight: self.$el.closest('.modal-content').height()
+ }).open();
+
+ self.optionalProductsModal.on('options_empty', null,
+ // no optional products found for this product, only add the root product
+ self._onAddRootProductOnly.bind(self));
+
+ self.optionalProductsModal.on('update_quantity', null,
+ self._onOptionsUpdateQuantity.bind(self));
+
+ self.optionalProductsModal.on('confirm', null,
+ self._onModalConfirm.bind(self));
+
+ self.optionalProductsModal.on('closed', null,
+ self._onModalClose.bind(self));
+ });
+ },
+
+ /**
+ * Add root product only and forget optional products.
+ * Used when product has no optional products and in 'edit' mode.
+ *
+ * @private
+ */
+ _onAddRootProductOnly: function () {
+ this._addProducts([this.rootProduct]);
+ },
+
+ /**
+ * Add all selected products
+ *
+ * @private
+ */
+ _onModalConfirm: function () {
+ this._wasConfirmed = true;
+ this._addProducts(this.optionalProductsModal.getSelectedProducts());
+ },
+
+ /**
+ * When the optional products modal is closed (and not confirmed) on 'options' mode,
+ * this window should also be closed immediately.
+ *
+ * @private
+ */
+ _onModalClose: function () {
+ if (this.renderer.state.context.configuratorMode === 'options'
+ && this._wasConfirmed !== true) {
+ this.do_action({type: 'ir.actions.act_window_close'});
+ }
+ },
+
+ /**
+ * Update product configurator form
+ * when quantity is updated in the optional products window
+ *
+ * @private
+ * @param {integer} quantity
+ */
+ _onOptionsUpdateQuantity: function (quantity) {
+ this.$el
+ .find('input[name="add_qty"]')
+ .val(quantity)
+ .trigger('change');
+ },
+
+ /**
+ * This triggers the close action for the window and
+ * adds the product as the "infos" parameter.
+ * It will allow the caller (typically the product_configurator widget) of this window
+ * to handle the added products.
+ *
+ * @private
+ * @param {Array} products the list of added products
+ * {integer} products.product_id: the id of the product
+ * {integer} products.quantity: the added quantity for this product
+ * {Array} products.product_custom_attribute_values:
+ * see variant_mixin.getCustomVariantValues
+ * {Array} products.no_variant_attribute_values:
+ * see variant_mixin.getNoVariantAttributeValues
+ */
+ _addProducts: function (products) {
+ this.do_action({type: 'ir.actions.act_window_close', infos: {
+ mainProduct: products[0],
+ options: products.slice(1)
+ }});
+ },
+ /**
+ * Extracts the ids from the passed attributeValueIds and returns them
+ * as a plain array.
+ *
+ * @param {Array} attributeValueIds
+ */
+ _getAttributeValueIds: function (attributeValueIds) {
+ if (!attributeValueIds || attributeValueIds.length === 0) {
+ return false;
+ }
+
+ var result = [];
+ _.each(attributeValueIds.data, function (attributeValue) {
+ result.push(attributeValue.data.id);
+ });
+
+ return result;
+ }
+});
+
+return ProductConfiguratorFormController;
+
+});
diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_modal.js b/addons/sale_product_configurator/static/src/js/product_configurator_modal.js
new file mode 100644
index 00000000..b495100a
--- /dev/null
+++ b/addons/sale_product_configurator/static/src/js/product_configurator_modal.js
@@ -0,0 +1,514 @@
+odoo.define('sale_product_configurator.OptionalProductsModal', function (require) {
+ "use strict";
+
+var ajax = require('web.ajax');
+var Dialog = require('web.Dialog');
+const OwlDialog = require('web.OwlDialog');
+var ServicesMixin = require('web.ServicesMixin');
+var VariantMixin = require('sale.VariantMixin');
+
+var OptionalProductsModal = Dialog.extend(ServicesMixin, VariantMixin, {
+ events: _.extend({}, 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 {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 = _.extend({
+ size: 'large',
+ buttons: [{
+ text: params.okButtonText,
+ click: this._onConfirmButtonClick,
+ classes: 'btn-primary'
+ }, {
+ text: params.cancelButtonText,
+ click: this._onCancelButtonClick
+ }],
+ technical: !params.isWebsite,
+ }, params || {});
+
+ this._super(parent, options);
+
+ this.context = params.context;
+ this.rootProduct = params.rootProduct;
+ this.container = parent;
+ this.pricelistId = params.pricelistId;
+ this.previousModalHeight = params.previousModalHeight;
+ this.dialogClass = 'oe_optional_products_modal';
+ this._productImageField = 'image_128';
+
+ this._opened.then(function () {
+ if (self.previousModalHeight) {
+ self.$el.closest('.modal-content').css('min-height', self.previousModalHeight + 'px');
+ }
+ });
+ },
+ /**
+ * @override
+ */
+ willStart: function () {
+ var self = this;
+
+ var uri = this._getUri("/sale_product_configurator/show_optional_products");
+ var getModalContent = ajax.jsonRpc(uri, 'call', {
+ product_id: self.rootProduct.product_id,
+ variant_values: self.rootProduct.variant_values,
+ pricelist_id: self.pricelistId || false,
+ add_qty: self.rootProduct.quantity,
+ kwargs: {
+ context: _.extend({
+ '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.removeAttr("aria-hidden");
+ self.$modal.modal().appendTo(self.container);
+ self.$modal.focus();
+ self._openedResolver();
+
+ // Notifies OwlDialog to adjust focus/active properties on owl dialogs
+ OwlDialog.display(self);
+ }
+ });
+ 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');
+ _.each($products, function (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
+ */
+ getSelectedProducts: function () {
+ var self = this;
+ var products = [this.rootProduct];
+ this.$modal.find('.js_product.in_cart:not(.main_product)').each(function () {
+ var $item = $(this);
+ var quantity = parseInt($item.find('input[name="add_qty"]').val(), 10);
+ var parentUniqueId = this.dataset.parentUniqueId;
+ var uniqueId = this.dataset.uniqueId;
+ var productCustomVariantValues = self.getCustomVariantValues($(this));
+ var noVariantAttributeValues = self.getNoVariantAttributeValues($(this));
+ products.push({
+ 'product_id': parseInt($item.find('input.product_id').val(), 10),
+ '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 (){
+ $updatedDescription.append($('<div>', {
+ text: this.attribute_value_name + ': ' + this.custom_value
+ }));
+ });
+
+ $.each(this.rootProduct.no_variant_attribute_values, function (){
+ if (this.is_custom !== 'True'){
+ $updatedDescription.append($('<div>', {
+ text: this.attribute_name + ': ' + this.attribute_value_name
+ }));
+ }
+ });
+
+ $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_optional_products_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-left');
+
+ 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'){
+ $customAttributeValuesDescription.append($('<div>', {
+ text: this.attribute_name + ': ' + this.attribute_value_name
+ }));
+ }
+ });
+
+ $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);
+
+ ajax.jsonRpc(self._getUri("/sale_product_configurator/optional_product_items"), 'call', {
+ '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 = parseInt($(this).find('input[name="add_qty"]').first().val(), 10);
+ 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 true;
+ },
+ /**
+ * 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;
+ },
+});
+
+return OptionalProductsModal;
+
+});
diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_renderer.js b/addons/sale_product_configurator/static/src/js/product_configurator_renderer.js
new file mode 100644
index 00000000..f0009e42
--- /dev/null
+++ b/addons/sale_product_configurator/static/src/js/product_configurator_renderer.js
@@ -0,0 +1,133 @@
+odoo.define('sale_product_configurator.ProductConfiguratorFormRenderer', function (require) {
+"use strict";
+
+var FormRenderer = require('web.FormRenderer');
+var VariantMixin = require('sale.VariantMixin');
+
+var ProductConfiguratorFormRenderer = FormRenderer.extend(VariantMixin, {
+
+ events: _.extend({}, FormRenderer.prototype.events, VariantMixin.events, {
+ 'click button.js_add_cart_json': 'onClickAddCartJSON',
+ }),
+
+ /**
+ * @override
+ */
+ init: function () {
+ this._super.apply(this, arguments);
+ this.pricelistId = this.state.context.default_pricelist_id || 0;
+ },
+ /**
+ * @override
+ */
+ start: function () {
+ var self = this;
+ return this._super.apply(this, arguments).then(function () {
+ self.$el.append($('<div>', {class: 'configurator_container'}));
+ self.renderConfigurator(self.configuratorHtml);
+ self._checkMode();
+ });
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * Renders the product configurator within the form
+ *
+ * Will also:
+ *
+ * - add events handling for variant changes
+ * - trigger variant change to compute the price and other
+ * variant specific changes
+ *
+ * @param {string} configuratorHtml the evaluated template of
+ * the product configurator
+ */
+ renderConfigurator: function (configuratorHtml) {
+ var $configuratorContainer = this.$('.configurator_container');
+ $configuratorContainer.empty();
+
+ var $configuratorHtml = $(configuratorHtml);
+ $configuratorHtml.appendTo($configuratorContainer);
+
+ this.triggerVariantChange($configuratorContainer);
+ this._applyCustomValues();
+ },
+
+ //--------------------------------------------------------------------------
+ // Private
+ //--------------------------------------------------------------------------
+
+ /**
+ * If the configuratorMode in the given context is 'edit', we need to
+ * hide the regular 'Add' button to replace it with an 'EDIT' button.
+ *
+ * If the configuratorMode is set to 'options', we will directly open the
+ * options modal.
+ *
+ * @private
+ */
+ _checkMode: function () {
+ if (this.state.context.configuratorMode === 'edit') {
+ this.$('.o_sale_product_configurator_add').hide();
+ this.$('.o_sale_product_configurator_edit').css('display', 'inline-block');
+ } else if (this.state.context.configuratorMode === 'options') {
+ this.trigger_up('handle_add');
+ }
+ },
+
+ /**
+ * Toggles the add button depending on the possibility of the current
+ * combination.
+ *
+ * @override
+ */
+ _toggleDisable: function ($parent, isCombinationPossible) {
+ VariantMixin._toggleDisable.apply(this, arguments);
+ $parent.parents('.modal').find('.o_sale_product_configurator_add').toggleClass('disabled', !isCombinationPossible);
+ },
+
+ /**
+ * Will fill the custom values input based on the provided initial configuration.
+ *
+ * @private
+ */
+ _applyCustomValues: function () {
+ var self = this;
+ var customValueIds = this.state.data.product_custom_attribute_value_ids;
+ if (customValueIds) {
+ _.each(customValueIds.data, function (customValue) {
+ if (customValue.data.custom_value) {
+ var attributeValueId = customValue.data.custom_product_template_attribute_value_id.data.id;
+ var $input = self._findRelatedAttributeValueInput(attributeValueId);
+ $input
+ .closest('li[data-attribute_id]')
+ .find('.variant_custom_value')
+ .val(customValue.data.custom_value);
+ }
+ });
+ }
+ },
+
+ /**
+ * Find the $.Element input/select related to that product.attribute.value
+ *
+ * @param {integer} attributeValueId
+ *
+ * @private
+ */
+ _findRelatedAttributeValueInput: function (attributeValueId) {
+ var selectors = [
+ 'ul.js_add_cart_variants input[data-value_id="' + attributeValueId + '"]',
+ 'ul.js_add_cart_variants option[data-value_id="' + attributeValueId + '"]'
+ ];
+
+ return this.$(selectors.join(', '));
+ }
+});
+
+return ProductConfiguratorFormRenderer;
+
+});
diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_view.js b/addons/sale_product_configurator/static/src/js/product_configurator_view.js
new file mode 100644
index 00000000..aa16a0bb
--- /dev/null
+++ b/addons/sale_product_configurator/static/src/js/product_configurator_view.js
@@ -0,0 +1,20 @@
+odoo.define('sale_product_configurator.ProductConfiguratorFormView', function (require) {
+"use strict";
+
+var ProductConfiguratorFormController = require('sale_product_configurator.ProductConfiguratorFormController');
+var ProductConfiguratorFormRenderer = require('sale_product_configurator.ProductConfiguratorFormRenderer');
+var FormView = require('web.FormView');
+var viewRegistry = require('web.view_registry');
+
+var ProductConfiguratorFormView = FormView.extend({
+ config: _.extend({}, FormView.prototype.config, {
+ Controller: ProductConfiguratorFormController,
+ Renderer: ProductConfiguratorFormRenderer,
+ }),
+});
+
+viewRegistry.add('product_configurator_form', ProductConfiguratorFormView);
+
+return ProductConfiguratorFormView;
+
+});
diff --git a/addons/sale_product_configurator/static/src/js/product_configurator_widget.js b/addons/sale_product_configurator/static/src/js/product_configurator_widget.js
new file mode 100644
index 00000000..9132eb01
--- /dev/null
+++ b/addons/sale_product_configurator/static/src/js/product_configurator_widget.js
@@ -0,0 +1,378 @@
+odoo.define('sale_product_configurator.product_configurator', function (require) {
+var ProductConfiguratorWidget = require('sale.product_configurator');
+
+/**
+ * Extension of the ProductConfiguratorWidget to support product configuration.
+ * It opens when a configurable product_template is set.
+ * (multiple variants, or custom attributes)
+ *
+ * The product customization information includes :
+ * - is_configurable_product
+ * - product_template_attribute_value_ids
+ *
+ */
+ProductConfiguratorWidget.include({
+ /**
+ * Override of sale.product_configurator Hook
+ *
+ * @override
+ */
+ _isConfigurableProduct: function () {
+ return this.recordData.is_configurable_product || this._super.apply(this, arguments);
+ },
+
+ /**
+ * Set restoreProductTemplateId for further backtrack.
+ * Saves the optional products in the widget for future application
+ * post-line configuration.
+ *
+ * {OdooEvent ev}
+ * {Array} ev.data.optionalProducts the various selected optional products
+ * with their configuration
+ *
+ * @override
+ * @private
+ */
+ reset: function (record, ev) {
+ if (ev && ev.target === this) {
+ this.restoreProductTemplateId = this.recordData.product_template_id;
+ this.optionalProducts = (ev.data && ev.data.optionalProducts) || this.optionalProducts;
+ }
+
+ this._super.apply(this, arguments);
+ },
+
+ /**
+ * This method is overridden to check if the product_template_id
+ * needs configuration or not:
+ *
+ * - The product_template has only one "product.product" and is not dynamic
+ * -> Set the product_id on the SO line
+ * -> If the product has optional products, open the configurator in 'options' mode
+ *
+ * - The product_template is configurable
+ * -> Open the product configurator wizard and initialize it with
+ * the provided product_template_id and its current attribute values
+ *
+ * @override
+ * @private
+ */
+ _onTemplateChange: function (productTemplateId, dataPointId) {
+ var self = this;
+ var ctx = {};
+ if (this.record && this.recordParams) {
+ ctx = this.record.getContext(this.recordParams);
+ }
+
+ return this._rpc({
+ model: 'product.template',
+ method: 'get_single_product_variant',
+ args: [productTemplateId],
+ context: ctx,
+ }).then(function (result) {
+ if (result.product_id && !result.has_optional_products) {
+ self.trigger_up('field_changed', {
+ dataPointID: dataPointId,
+ changes: {
+ product_id: {id: result.product_id},
+ product_custom_attribute_value_ids: {
+ operation: 'DELETE_ALL'
+ }
+ },
+ });
+ } else {
+ return self._openConfigurator(result, productTemplateId, dataPointId);
+ }
+ // always returns true for the moment because no other configurator exists.
+ });
+ },
+
+ /**
+ * When line is configured, apply the options defined earlier.
+ * @override
+ * @private
+ */
+ _onLineConfigured: function () {
+ var self = this;
+ this._super.apply(this, arguments);
+ var parentList = self.getParent();
+ var unselectRow = (parentList.unselectRow || function() {}).bind(parentList); // form view on mobile
+ if (self.optionalProducts && self.optionalProducts.length !== 0) {
+ self.trigger_up('add_record', {
+ context: self._productsToRecords(self.optionalProducts),
+ forceEditable: 'bottom',
+ allowWarning: true,
+ onSuccess: function () {
+ // Leave edit mode of one2many list.
+ unselectRow();
+ }
+ });
+ } else if (!self._isConfigurableLine() && self._isConfigurableProduct()) {
+ // Leave edit mode of current line if line was configured
+ // only through the product configurator.
+ unselectRow();
+ }
+ },
+
+ _openConfigurator: function (result, productTemplateId, dataPointId) {
+ if (!result.mode || result.mode === 'configurator') {
+ this._openProductConfigurator({
+ configuratorMode: result && result.has_optional_products ? 'options' : 'add',
+ default_pricelist_id: this._getPricelistId(),
+ default_product_template_id: productTemplateId
+ },
+ dataPointId
+ );
+ return Promise.resolve(true);
+ }
+ return Promise.resolve(false);
+ },
+
+ /**
+ * Opens the product configurator to allow configuring the product template
+ * and its various options.
+ *
+ * The configuratorMode param controls how to open the configurator.
+ * - The "add" mode will allow configuring the product template & options.
+ * - The "edit" mode will only allow editing the product template's configuration.
+ * - The "options" mode is a special case where the product configurator is used as a bridge
+ * between the SO line and the optional products modal. It will hide its window and handle
+ * the communication between those two.
+ *
+ * When the configuration is canceled (i.e when the product configurator is closed using the
+ * "CANCEL" button or the cross on the top right corner of the window),
+ * the product_template is reset to its previous value if any.
+ *
+ * @param {Object} data various "default_" values
+ * {string} data.configuratorMode 'add' or 'edit' or 'options'.
+ * @param {string} dataPointId
+ *
+ * @private
+ */
+ _openProductConfigurator: function (data, dataPointId) {
+ this.optionalProducts = undefined;
+ var self = this;
+ this.do_action('sale_product_configurator.sale_product_configurator_action', {
+ additional_context: data,
+ on_close: function (result) {
+ if (result && !result.special) {
+ self._addProducts(result, dataPointId);
+ } else {
+ if (self.restoreProductTemplateId) {
+ // if configurator opened in edit mode.
+ self.trigger_up('field_changed', {
+ dataPointID: dataPointId,
+ preventProductIdCheck: true,
+ changes: {
+ product_template_id: self.restoreProductTemplateId.data
+ }
+ });
+ } else {
+ // if configurator opened to create line:
+ // destroy line if configurator closed during configuration process.
+ self.trigger_up('field_changed', {
+ dataPointID: dataPointId,
+ changes: {
+ product_template_id: false,
+ product_id: false,
+ },
+ });
+ }
+ }
+ }
+ });
+ },
+
+ /**
+ * Opens the product configurator in "edit" mode.
+ * (see '_openProductConfigurator' for more info on the "edit" mode).
+ * The requires to retrieve all the needed data from the SO line
+ * that are kept in the "recordData" object.
+ *
+ * @private
+ */
+ _onEditProductConfiguration: function () {
+ if (!this.recordData.is_configurable_product) {
+ // if line should be edited by another configurator
+ // or simply inline.
+ this._super.apply(this, arguments);
+ return;
+ }
+ // If line has been set up through the product_configurator:
+ this._openProductConfigurator({
+ configuratorMode: 'edit',
+ default_product_template_id: this.recordData.product_template_id.data.id,
+ default_pricelist_id: this._getPricelistId(),
+ default_product_template_attribute_value_ids: this._convertFromMany2Many(
+ this.recordData.product_template_attribute_value_ids
+ ),
+ default_product_no_variant_attribute_value_ids: this._convertFromMany2Many(
+ this.recordData.product_no_variant_attribute_value_ids
+ ),
+ default_product_custom_attribute_value_ids: this._convertFromOne2Many(
+ this.recordData.product_custom_attribute_value_ids
+ ),
+ default_quantity: this.recordData.product_uom_qty
+ },
+ this.dataPointID
+ );
+ },
+
+ /**
+ * This will first modify the SO line to update all the information coming from
+ * the product configurator using the 'field_changed' event.
+ *
+ * onSuccess from that first method, it will add the optional products to the SO
+ * using the 'add_record' event.
+ *
+ * Doing both at the same time could lead to unordered product_template/options.
+ *
+ * @param {Object} products the products to add to the SO line.
+ * {Object} products.mainProduct the product_template configured
+ * with various attribute/custom values
+ * {Array} products.options the various selected optional products
+ * with their configuration
+ * @param {string} dataPointId
+ *
+ * @private
+ */
+ _addProducts: function (result, dataPointId) {
+ this.trigger_up('field_changed', {
+ dataPointID: dataPointId,
+ preventProductIdCheck: true,
+ optionalProducts: result.options,
+ changes: this._getMainProductChanges(result.mainProduct)
+ });
+ },
+
+ /**
+ * This will convert the result of the product configurator into
+ * "changes" that are understood by the basic_model.js
+ *
+ * For the product_custom_attribute_value_ids, we need to do a DELETE_ALL
+ * command to clean the currently selected values and then a CREATE for every
+ * custom value specified in the configurator.
+ *
+ * For the product_no_variant_attribute_value_ids, we also need to do a DELETE_ALL
+ * command to clean the currently selected values and issue a single ADD_M2M containing
+ * all the ids of the product_attribute_values.
+ *
+ * @param {Object} mainProduct
+ *
+ * @private
+ */
+ _getMainProductChanges: function (mainProduct) {
+ var result = {
+ product_id: {id: mainProduct.product_id},
+ product_template_id: {id: mainProduct.product_template_id},
+ product_uom_qty: mainProduct.quantity
+ };
+
+ var customAttributeValues = mainProduct.product_custom_attribute_values;
+ var customValuesCommands = [{operation: 'DELETE_ALL'}];
+ if (customAttributeValues && customAttributeValues.length !== 0) {
+ _.each(customAttributeValues, function (customValue) {
+ // FIXME awa: This could be optimized by adding a "disableDefaultGet" to avoid
+ // having multiple default_get calls that are useless since we already
+ // have all the default values locally.
+ // However, this would mean a lot of changes in basic_model.js to handle
+ // those "default_" values and set them on the various fields (text,o2m,m2m,...).
+ // -> This is not considered as worth it right now.
+ customValuesCommands.push({
+ operation: 'CREATE',
+ context: [{
+ default_custom_product_template_attribute_value_id: customValue.custom_product_template_attribute_value_id,
+ default_custom_value: customValue.custom_value
+ }]
+ });
+ });
+ }
+
+ result['product_custom_attribute_value_ids'] = {
+ operation: 'MULTI',
+ commands: customValuesCommands
+ };
+
+ var noVariantAttributeValues = mainProduct.no_variant_attribute_values;
+ var noVariantCommands = [{operation: 'DELETE_ALL'}];
+ if (noVariantAttributeValues && noVariantAttributeValues.length !== 0) {
+ var resIds = _.map(noVariantAttributeValues, function (noVariantValue) {
+ return {id: parseInt(noVariantValue.value)};
+ });
+
+ noVariantCommands.push({
+ operation: 'ADD_M2M',
+ ids: resIds
+ });
+ }
+
+ result['product_no_variant_attribute_value_ids'] = {
+ operation: 'MULTI',
+ commands: noVariantCommands
+ };
+
+ return result;
+ },
+
+ /**
+ * Returns the pricelist_id set on the sale_order form
+ *
+ * @private
+ * @returns {integer} pricelist_id's id
+ */
+ _getPricelistId: function () {
+ return this.record.evalContext.parent.pricelist_id;
+ },
+
+ /**
+ * Will map the products to appropriate record objects that are
+ * ready for the default_get.
+ *
+ * @param {Array} products The products to transform into records
+ *
+ * @private
+ */
+ _productsToRecords: function (products) {
+ var records = [];
+ _.each(products, function (product) {
+ var record = {
+ default_product_id: product.product_id,
+ default_product_template_id: product.product_template_id,
+ default_product_uom_qty: product.quantity
+ };
+
+ if (product.no_variant_attribute_values) {
+ var defaultProductNoVariantAttributeValues = [];
+ _.each(product.no_variant_attribute_values, function (attributeValue) {
+ defaultProductNoVariantAttributeValues.push(
+ [4, parseInt(attributeValue.value)]
+ );
+ });
+ record['default_product_no_variant_attribute_value_ids']
+ = defaultProductNoVariantAttributeValues;
+ }
+
+ if (product.product_custom_attribute_values) {
+ var defaultCustomAttributeValues = [];
+ _.each(product.product_custom_attribute_values, function (attributeValue) {
+ defaultCustomAttributeValues.push(
+ [0, 0, {
+ custom_product_template_attribute_value_id: attributeValue.custom_product_template_attribute_value_id,
+ custom_value: attributeValue.custom_value
+ }]
+ );
+ });
+ record['default_product_custom_attribute_value_ids']
+ = defaultCustomAttributeValues;
+ }
+
+ records.push(record);
+ });
+
+ return records;
+ }
+});
+
+return ProductConfiguratorWidget;
+
+});
diff --git a/addons/sale_product_configurator/static/tests/product_configurator.test.js b/addons/sale_product_configurator/static/tests/product_configurator.test.js
new file mode 100644
index 00000000..2d737820
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/product_configurator.test.js
@@ -0,0 +1,309 @@
+odoo.define('sale.product.configurator.tests', function (require) {
+"use strict";
+
+var FormView = require('web.FormView');
+var ProductConfiguratorFormView = require('sale_product_configurator.ProductConfiguratorFormView');
+var testUtils = require('web.test_utils');
+var createView = testUtils.createView;
+
+var getArch = function (){
+ return '<form>' +
+ '<sheet>' +
+ '<field name="pricelist_id" widget="selection" />' +
+ '<field name="sale_order_line" widget="section_and_note_one2many">' +
+ '<tree editable="top"><control>' +
+ '<create string="Add a product"/>' +
+ '<create string="Add a section" context="{\'default_display_type\': \'line_section\'}"/>' +
+ '<create string="Add a note" context="{\'default_display_type\': \'line_note\'}"/>' +
+ '</control>' +
+ '<field name="product_id" invisible="1"/>' +
+ '<field name="product_template_id" widget="product_configurator"/>' +
+ '<field name="product_uom_qty"/>' +
+ '<field name="product_custom_attribute_value_ids" invisible="1"/>' +
+ '</tree>' +
+ '</field>' +
+ '</sheet>' +
+ '</form>';
+};
+
+QUnit.module('Product Configurator', {
+ beforeEach: function () {
+ this.data = {
+ product_template: {
+ fields: {
+ id: {type: 'integer'}
+ },
+ records: [{
+ id: 42,
+ display_name: "Customizable Desk"
+ }]
+ },
+ product: {
+ fields: {
+ id: {type: 'integer'}
+ },
+ records: [{
+ id: 1,
+ display_name: "Customizable Desk (1)"
+ }, {
+ id: 2,
+ display_name: "Customizable Desk (2)"
+ }]
+ },
+ sale_order: {
+ fields: {
+ id: {type: 'integer'},
+ pricelist_id: {
+ string: 'Pricelist',
+ type: 'one2many',
+ relation: 'pricelist'
+ },
+ sale_order_line: {
+ string: 'lines',
+ type: 'one2many',
+ relation: 'sale_order_line'
+ },
+ }
+ },
+ sale_order_line: {
+ fields: {
+ product_template_id: {
+ string: 'product template',
+ type: 'many2one',
+ relation: 'product_template'
+ },
+ product_id: {
+ string: 'product',
+ type: 'many2one',
+ relation: 'product'
+ },
+ product_custom_attribute_value_ids: {
+ string: 'product_custom_attribute_values',
+ type: 'one2many',
+ relation: 'product_custom_attribute_value'
+ },
+ product_uom_qty: {type: 'integer'},
+ sequence: {type: 'integer'},
+ }
+ },
+ product_custom_attribute_value: {
+ fields: {
+ id: {type: 'integer'},
+ sale_order_line_id: {
+ string: 'sale order line',
+ type: 'many2one',
+ relation: 'sale_order_line'
+ }
+ }
+ },
+ sale_product_configurator: {
+ fields: {
+ product_template_id: {
+ string: 'product',
+ type: 'many2one',
+ relation: 'product_template'
+ },
+ product_template_attribute_value_ids: {
+ type: 'many2many',
+ relation: 'product_template_attribute_value'
+ },
+ product_no_variant_attribute_value_ids: {
+ type: 'many2many',
+ relation: 'product_template_attribute_value'
+ },
+ product_custom_attribute_value_ids: {
+ type: 'many2many',
+ relation: 'product_attribute_custom_value'
+ }
+ },
+ records: [{
+ product_template_id: 42
+ }]
+ },
+ product_template_attribute_value: {
+ fields: {
+ id: {type: 'integer'}
+ }
+ },
+ product_attribute_custom_value: {
+ fields: {
+ id: {type: 'integer'}
+ }
+ },
+ pricelist: {
+ fields: {
+ id: {type: 'integer'}
+ }
+ }
+ };
+ }
+}, function () {
+ QUnit.test('Select a non configurable product template and verify that the product_id is correctly set', async function (assert) {
+ assert.expect(2);
+
+ var form = await createView({
+ View: FormView,
+ model: 'sale_order',
+ data: this.data,
+ arch: getArch(),
+ mockRPC: function (route, params) {
+ if (params.method === 'get_single_product_variant') {
+ assert.ok(true);
+ return Promise.resolve({product_id: 2});
+ }
+ // FIXME awa: this shouldn't be here since the read is done in 'event_sale'
+ // But at the moment there is no easy way to solve such cross module 'include' issues
+ if (params.method === 'read') {
+ return Promise.resolve(false);
+ }
+ return this._super.apply(this, arguments);
+ },
+ intercepts: {
+ do_action: function (ev) {
+ if (ev.data.action === 'sale_product_configurator.sale_product_configurator_action') {
+ assert.ok(false, "Should not execute the configure action");
+ }
+ },
+ }
+ });
+
+ await testUtils.dom.click(form.$("a:contains('Add a product')"));
+ await testUtils.fields.many2one.searchAndClickItem("product_template_id", {item: 'Customizable Desk'});
+ // check that product_id is correctly set to 2
+ assert.strictEqual(form.renderer.state.data.sale_order_line.data[0].data.product_id.data.id, 2);
+ form.destroy();
+ });
+
+ QUnit.test('Select a configurable product template and verify that the product configurator is opened', async function (assert) {
+ assert.expect(2);
+
+ var form = await createView({
+ View: FormView,
+ model: 'sale_order',
+ data: this.data,
+ arch: getArch(),
+ mockRPC: function (route, params) {
+ if (params.method === 'get_single_product_variant') {
+ assert.ok(true);
+ return Promise.resolve(false);
+ }
+ return this._super.apply(this, arguments);
+ },
+ intercepts: {
+ do_action: function (ev) {
+ if (ev.data.action === 'sale_product_configurator.sale_product_configurator_action') {
+ assert.ok(true);
+ }
+ },
+ }
+ });
+
+ await testUtils.dom.click(form.$("a:contains('Add a product')"));
+ await testUtils.fields.many2one.searchAndClickItem("product_template_id", {item: 'Customizable Desk'});
+ form.destroy();
+ });
+
+ QUnit.test('trigger_up the "add_record" event and checks that rows are correctly added to the list', async function (assert) {
+ assert.expect(1);
+
+ var form = await createView({
+ View: FormView,
+ model: 'sale_order',
+ data: this.data,
+ arch: getArch()
+ });
+
+ var list = form.renderer.allFieldWidgets[form.handle][1];
+
+ list.trigger_up('add_record', {
+ context: [{default_product_id: 1, default_product_uom_qty: 2}, {default_product_id: 2, default_product_uom_qty: 3}],
+ forceEditable: "bottom" ,
+ allowWarning: true
+ });
+ await testUtils.nextTick();
+
+ assert.containsN(list, "tr.o_data_row", 2);
+ form.destroy();
+ });
+
+ QUnit.test('Select a product in the list and check for template loading', async function (assert) {
+ assert.expect(1);
+
+ var product_configurator_form = await createView({
+ View: ProductConfiguratorFormView,
+ model: 'sale_product_configurator',
+ data: this.data,
+ arch:
+ '<form js_class="product_configurator_form">' +
+ '<group>' +
+ '<field name="product_template_id" class="oe_product_configurator_product_template_id" />' +
+ '<field name="product_template_attribute_value_ids" invisible="1" />' +
+ '<field name="product_no_variant_attribute_value_ids" invisible="1" />' +
+ '<field name="product_custom_attribute_value_ids" invisible="1" />' +
+ '</group>' +
+ '<footer>' +
+ '<button string="Add" class="btn-primary o_sale_product_configurator_add disabled"/>' +
+ '<button string="Cancel" class="btn-secondary" special="cancel"/>' +
+ '</footer>' +
+ '</form>',
+ mockRPC: function (route) {
+ if (route === '/sale_product_configurator/configure') {
+ assert.ok(true);
+ return Promise.resolve('<div>plop</div>');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+ await testUtils.dom.click(product_configurator_form.$('.o_input'));
+ await testUtils.dom.click($("ul.ui-autocomplete li a:contains('Customizable Desk')").mouseenter());
+ product_configurator_form.destroy();
+ });
+
+ QUnit.test('drag and drop rows containing product_configurator many2one', async function (assert) {
+ assert.expect(4);
+
+ this.data.sale_order.records = [
+ { id: 1, sale_order_line: [1, 2] }
+ ];
+ this.data.sale_order_line.records = [
+ { id: 1, sequence: 5, product_id: 1 },
+ { id: 2, sequence: 15, product_id: 2 },
+ ];
+
+ const form = await createView({
+ View: FormView,
+ model: 'sale_order',
+ data: this.data,
+ arch: `
+ <form>
+ <field name="sale_order_line"/>
+ </form>`,
+ archs: {
+ 'sale_order_line,false,list': `
+ <tree editable="bottom">
+ <field name="sequence" widget="handle"/>
+ <field name="product_id" widget="product_configurator"/>
+ </tree>`,
+ },
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ });
+
+ assert.containsN(form, '.o_data_row', 2);
+ assert.strictEqual(form.$('.o_data_row').text(), 'Customizable Desk (1)Customizable Desk (2)');
+ assert.containsN(form, '.o_data_row .o_row_handle', 2);
+
+ // move first row below second
+ const $firstHandle = form.$('.o_data_row:nth(0) .o_row_handle');
+ const $secondHandle = form.$('.o_data_row:nth(1) .o_row_handle');
+ await testUtils.dom.dragAndDrop($firstHandle, $secondHandle);
+
+ assert.strictEqual(form.$('.o_data_row').text(), 'Customizable Desk (2)Customizable Desk (1)');
+
+ form.destroy();
+ });
+});
+
+});
diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js
new file mode 100644
index 00000000..16251f56
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js
@@ -0,0 +1,165 @@
+odoo.define('sale.sale_product_configurator_advanced_tour', function (require) {
+"use strict";
+
+var tour = require('web_tour.tour');
+
+var optionVariantImage;
+
+tour.register('sale_product_configurator_advanced_tour', {
+ url: "/web",
+ test: true,
+}, [tour.stepUtils.showAppsMenuItem(), {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]', // Note: The module sale_management is mandatory
+ edition: 'community'
+}, {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'enterprise'
+}, {
+ trigger: ".o_list_button_add",
+ extra_trigger: ".o_sale_order"
+}, {
+ trigger: ".o_required_modifier[name=partner_id] input",
+ run: "text Tajine Saucisse",
+}, {
+ trigger: ".ui-menu-item > a:contains('Tajine Saucisse')",
+ auto: true,
+}, {
+ trigger: "a:contains('Add a product')",
+ extra_trigger: ".o_field_widget[name=partner_shipping_id] > .o_external_button", // Wait for onchange_partner_id
+}, {
+ trigger: 'div[name="product_template_id"] input',
+ run: function (){
+ var $input = $('div[name="product_template_id"] input');
+ $input.click();
+ $input.val('Custo');
+ var keyDownEvent = jQuery.Event("keydown");
+ keyDownEvent.which = 42;
+ $input.trigger(keyDownEvent);
+ }
+}, {
+ trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")',
+ run: 'click'
+}, {
+ trigger: 'span:contains("Custom")',
+ extra_trigger: '.o_product_configurator',
+ run: 'click'
+}, {
+ trigger: '.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(1) .variant_custom_value',
+ extra_trigger: '.o_product_configurator',
+ run: 'text Custom 1'
+}, {
+ trigger: '.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(3) span:contains("PAV9")',
+ extra_trigger: '.o_product_configurator',
+ run: 'click'
+}, {
+ trigger: '.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(3) .variant_custom_value',
+ extra_trigger: '.o_product_configurator',
+ run: 'text Custom 2'
+}, {
+ trigger: '.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(4) span:contains("PAV5")',
+ extra_trigger: '.o_product_configurator',
+ run: 'click'
+}, {
+ trigger: '.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(6) select ',
+ extra_trigger: '.o_product_configurator',
+ run: function (){
+ var inputValue = $('.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(6) option[data-value_name="PAV9"]').val();
+ $('.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(6) select').val(inputValue);
+ $('.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(6) select').trigger('change');
+ }
+}, {
+ trigger: '.o_product_configurator ul.js_add_cart_variants li[data-attribute_id]:nth-child(6) .variant_custom_value',
+ extra_trigger: '.o_product_configurator',
+ run: 'text Custom 3'
+}, {
+ trigger: ".o_sale_product_configurator_add",
+ run: 'click'
+}, {
+ trigger: '.main_product strong:contains("Custom, White, PAV9, PAV5, PAV1")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.main_product div:contains("Custom: Custom 1")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.main_product div:contains("PAV9: Custom 2")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.main_product div:contains("PAV9: Custom 3")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.main_product div:contains("PA5: PAV1")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.main_product div:contains("PA7: PAV1")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.main_product div:contains("PA8: PAV1")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: function () {} //check
+}, {
+ trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("Conference Chair (TEST) (Steel)")',
+ run: function () {
+ optionVariantImage = $('.oe_optional_products_modal .js_product:eq(1) img.variant_image').attr('src');
+ }
+}, {
+ trigger: '.oe_optional_products_modal .js_product:eq(1) input[data-value_name="Aluminium"]',
+}, {
+ trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("Conference Chair (TEST) (Aluminium)")',
+ run: function () {
+ var newVariantImage = $('.oe_optional_products_modal .js_product:eq(1) img.variant_image').attr('src');
+ if (newVariantImage !== optionVariantImage) {
+ $('<p>').text('image variant option src changed').insertAfter('.oe_optional_products_modal .js_product:eq(1) .product-name');
+ }
+
+ }
+}, {
+ extra_trigger: '.oe_optional_products_modal .js_product:eq(1) div:contains("image variant option src changed")',
+ trigger: '.oe_optional_products_modal .js_product:eq(1) input[data-value_name="Steel"]',
+}, {
+ trigger: 'button span:contains(Confirm)',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Custom, White, PAV9, PAV5, PAV1)")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}, {
+ trigger: 'td.o_data_cell:contains("Legs: Custom: Custom 1")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}, {
+ trigger: 'td.o_data_cell:contains("PA1: PAV9: Custom 2")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}, {
+ trigger: 'td.o_data_cell:contains("PA4: PAV9: Custom 3")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}, {
+ trigger: 'td.o_data_cell:contains("PA5: PAV1")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}, {
+ trigger: 'td.o_data_cell:contains("PA7: PAV1")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}, {
+ trigger: 'td.o_data_cell:contains("PA8: PAV1")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){} //check
+}]);
+
+});
diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js
new file mode 100644
index 00000000..dc7663d6
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js
@@ -0,0 +1,160 @@
+odoo.define('sale.product_configurator_edition_tour', function (require) {
+"use strict";
+
+var tour = require('web_tour.tour');
+
+tour.register('sale_product_configurator_edition_tour', {
+ url: "/web",
+ test: true,
+}, [tour.stepUtils.showAppsMenuItem(), {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'community'
+}, {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'enterprise'
+}, {
+ trigger: ".o_list_button_add",
+ extra_trigger: ".o_sale_order"
+}, {
+ trigger: "a:contains('Add a product')"
+}, {
+ trigger: 'div[name="product_template_id"] input',
+ run: function (){
+ var $input = $('div[name="product_template_id"] input');
+ $input.click();
+ $input.val('Custo');
+ var keyDownEvent = jQuery.Event("keydown");
+ keyDownEvent.which = 42;
+ $input.trigger(keyDownEvent);
+ }
+}, {
+ trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")',
+ run: 'click'
+}, {
+ trigger: '.configurator_container span:contains("Steel")',
+ run: function () {
+ $('input.product_id').change(function () {
+ $('.o_sale_product_configurator_add').attr('request_count', 1);
+ });
+ }
+}, {
+ trigger: '.configurator_container span:contains("Aluminium")'
+}, {
+ trigger: '.o_sale_product_configurator_add[request_count="1"]',
+ run: function (){} // used to sync with "get_combination_info" completion
+}, {
+ trigger: '.o_sale_product_configurator_add:not(.disabled)'
+}, {
+ trigger: 'button span:contains(Confirm)',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Aluminium, White)")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function (){} // check added product
+}, {
+ trigger: 'td.o_product_configurator_cell',
+}, {
+ trigger: '.o_edit_product_configuration',
+}, {
+ trigger: '.configurator_container li.js_attribute_value:has(span:contains("Aluminium")) input:checked',
+ run: function (){} // check updated legs
+}, {
+ trigger: 'span.oe_currency_value:contains("800")',
+ run: function (){} // check updated price
+}, {
+ trigger: '.configurator_container span:contains("Steel")',
+ run: function () {
+ $('input.product_id').change(function () {
+ if ($('.o_sale_product_configurator_edit').attr('request_count')) {
+ $('.o_sale_product_configurator_edit').attr('request_count',
+ parseInt($('.o_sale_product_configurator_edit').attr('request_count')) + 1);
+ } else {
+ $('.o_sale_product_configurator_edit').attr('request_count', 1);
+ }
+ });
+ }
+}, {
+ trigger: '.configurator_container span:contains("Custom")',
+ run: function () {
+ // FIXME awa: since jquery3 update it doesn't "click"
+ // on the element without this run (and 'run: "click"'
+ // doesn't work either)
+ $('.configurator_container span:contains("Custom")').click();
+ }
+}, {
+ trigger: '.configurator_container .variant_custom_value',
+ run: 'text nice custom value'
+}, {
+ trigger: 'input[data-value_name="Black"]',
+ run: 'click'
+}, {
+ trigger: '.o_sale_product_configurator_edit[request_count="2"]',
+ run: function (){} // used to sync with "get_combination_info" completion
+}, {
+ trigger: '.o_sale_product_configurator_edit',
+}, {
+ trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Custom, Black)")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function (){} // check updated product
+}, {
+ trigger: 'td.o_data_cell:contains("Custom: nice custom value")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function (){} // check custom value
+}, {
+ trigger: 'td.o_product_configurator_cell',
+}, {
+ trigger: '.o_edit_product_configuration',
+}, {
+ trigger: '.configurator_container .variant_custom_value',
+ run: 'text another nice custom value'
+}, {
+ trigger: '.o_sale_product_configurator_edit',
+}, {
+ trigger: 'td.o_data_cell:contains("Custom: another nice custom value")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function (){} // check custom value
+}, {
+ trigger: 'td.o_product_configurator_cell',
+}, {
+ trigger: '.o_edit_product_configuration',
+}, {
+ trigger: '.configurator_container span:contains("Steel")',
+ run: function () {
+ $('input.product_id').change(function () {
+ $('.o_sale_product_configurator_edit').attr('request_count', 1);
+ });
+ }
+}, {
+ trigger: '.configurator_container span:contains("Steel")',
+ run: function () {
+ // FIXME awa: since jquery3 update it doesn't "click"
+ // on the element without this run (and 'run: "click"'
+ // doesn't work either)
+ $('.configurator_container span:contains("Steel")').click();
+ }
+}, {
+ trigger: '.o_sale_product_configurator_edit[request_count="1"]',
+ run: function (){} // used to sync with "get_combination_info" completion
+}, {
+ trigger: '.configurator_container button.js_add_cart_json:has(.fa-plus)',
+}, {
+ trigger: '.o_sale_product_configurator_edit',
+}, {
+ trigger: 'td.o_data_cell:contains("2.00")',
+ run: function (){} // check quantity
+}, {
+ trigger: 'td.o_product_configurator_cell',
+ run: function () {
+ // used to check that the description does not contain a custom value anymore
+ if ($('td.o_data_cell:contains("Custom: another nice custom value")').length === 0){
+ $('td.o_data_cell:contains("Customizable Desk (TEST) (Steel, Black)")').html('tour success');
+ }
+ }
+}, {
+ trigger: 'td.o_data_cell:contains("tour success")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function (){}
+}]);
+
+});
diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js
new file mode 100644
index 00000000..c566ce5b
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js
@@ -0,0 +1,79 @@
+odoo.define('sale.product_configurator_optional_products_tour', function (require) {
+"use strict";
+
+var tour = require('web_tour.tour');
+
+tour.register('sale_product_configurator_optional_products_tour', {
+ url: "/web",
+ test: true,
+}, [tour.stepUtils.showAppsMenuItem(), {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'community'
+}, {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'enterprise'
+}, {
+ trigger: ".o_list_button_add",
+ extra_trigger: ".o_sale_order"
+}, {
+ trigger: "a:contains('Add a product')"
+}, {
+ trigger: 'div[name="product_template_id"] input',
+ run: function () {
+ var $input = $('div[name="product_template_id"] input');
+ $input.click();
+ $input.val('Customizable Desk');
+ var keyDownEvent = jQuery.Event("keydown");
+ keyDownEvent.which = 42;
+ $input.trigger(keyDownEvent);
+ }
+}, {
+ trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")',
+ run: 'click'
+}, {
+ trigger: '.o_sale_product_configurator_add'
+}, {
+ trigger: 'tr:has(.td-product_name:contains("Office Chair Black")) .js_add',
+}, {
+ trigger: 'tr:has(.td-product_name:contains("Customizable Desk")) .fa-plus'
+}, {
+ trigger: 'tr:has(.td-product_name:contains("Chair floor protection")) .js_add',
+}, {
+ content: 'Is below its parent 1',
+ trigger: 'tr:has(.td-product_name:contains("Office Chair Black")) + tr:has(.td-product_name:contains("Chair floor protection"))'
+}, {
+ trigger: 'tr:has(.td-product_name:contains("Conference Chair")) .js_add',
+}, {
+ trigger: 'tr:has(.td-product_name:contains("Conference Chair")) .fa-minus'
+}, {
+ trigger: 'tr:has(.td-product_name:contains("Chair floor protection")) .js_add',
+}, {
+ content: 'Is below its parent 2',
+ trigger: 'tr:has(.td-product_name:contains("Conference Chair")) + tr:has(.td-product_name:contains("Chair floor protection"))'
+}, {
+ trigger: 'button span:contains(Confirm)',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ trigger: 'tr:has(td.o_data_cell:contains("Customizable Desk")) td.o_data_cell:contains("2.0")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function () {}, // check added product
+}, {
+ trigger: 'tr:has(td.o_data_cell:contains("Office Chair Black")) td.o_data_cell:contains("1.0")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function () {}, // check added product
+}, {
+ trigger: 'tr:has(td.o_data_cell:contains("Conference Chair")) td.o_data_cell:contains("1.0")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function () {}, // check added product
+}, {
+ trigger: 'tr:has(td.o_data_cell:contains("Chair floor protection")):nth(0) td.o_data_cell:contains("1.0")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function () {}, // check added product
+}, {
+ trigger: 'tr:has(td.o_data_cell:contains("Chair floor protection")):nth(1) td.o_data_cell:contains("1.0")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function () {}, // check added product
+}]);
+
+});
diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js
new file mode 100644
index 00000000..af97bf1f
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js
@@ -0,0 +1,99 @@
+odoo.define('sale.product_configurator_pricelist_tour', function (require) {
+"use strict";
+
+var tour = require('web_tour.tour');
+
+tour.register('sale_product_configurator_pricelist_tour', {
+ url: "/web",
+ test: true,
+},
+[
+tour.stepUtils.showAppsMenuItem(),
+{
+ content: "navigate to the sale app",
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'community'
+}, {
+ content: "navigate to the sale app",
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'enterprise'
+}, {
+ content: "create a new order",
+ trigger: '.o_list_button_add',
+ extra_trigger: ".o_sale_order"
+}, {
+ content: "search the partner",
+ trigger: 'div[name="partner_id"] input',
+ run: 'text Azure'
+}, {
+ content: "select the partner",
+ trigger: 'ul.ui-autocomplete > li > a:contains(Azure)',
+}, {
+ content: "search the pricelist",
+ trigger: 'div[name="pricelist_id"] input',
+ run: 'text Custom pricelist (TEST)'
+}, {
+ content: "select the pricelist",
+ trigger: 'ul.ui-autocomplete > li > a:contains(Custom pricelist (TEST))',
+}, {
+ trigger: "a:contains('Add a product')"
+}, {
+ trigger: 'div[name="product_template_id"] input',
+ run: function (){
+ var $input = $('div[name="product_template_id"] input');
+ $input.click();
+ $input.val('Custo');
+ var keyDownEvent = jQuery.Event("keydown");
+ keyDownEvent.which = 42;
+ $input.trigger(keyDownEvent);
+ }
+}, {
+ trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")',
+ run: 'click'
+}, {
+ content: "check price is correct (USD)",
+ trigger: 'span.oe_currency_value:contains("750.00")',
+ run: function () {} // check price
+}, {
+ content: "add one more",
+ trigger: 'button.js_add_cart_json:has(i.fa-plus)',
+}, {
+ content: "check price for 2",
+ trigger: 'span.oe_currency_value:contains("600.00")',
+ run: function () {} // check price (pricelist has discount for 2)
+}, {
+ content: "click add",
+ trigger: '.o_sale_product_configurator_add:not(.disabled)'
+}, {
+ content: "check we are on the add modal",
+ trigger: '.td-product_name:contains("Customizable Desk (TEST) (Steel, White)")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ content: "add conference chair",
+ trigger: '.js_product:has(strong:contains(Conference Chair)) .js_add',
+ extra_trigger: '.oe_optional_products_modal .js_product:has(strong:contains(Conference Chair))',
+ run: 'click'
+}, {
+ content: "add chair floor protection",
+ trigger: '.js_product:has(strong:contains(Chair floor protection)) .js_add',
+ extra_trigger: '.oe_optional_products_modal .js_product:has(strong:contains(Chair floor protection))',
+ run: 'click'
+}, {
+ content: "verify configurator final price", // tax excluded
+ trigger: '.o_total_row .oe_currency_value:contains("1,257.00")',
+}, {
+ content: "add to SO",
+ trigger: 'button span:contains(Confirm)',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ content: "verify SO final price excluded",
+ trigger: 'span[name="amount_untaxed"]:contains("1,257.00")',
+}, {
+ content: "verify SO final price included",
+ trigger: 'span[name="amount_total"]:contains("1,437.00")',
+}
+]);
+
+});
diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js
new file mode 100644
index 00000000..8b1db607
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js
@@ -0,0 +1,79 @@
+odoo.define('sale.product_configurator_single_custom_attribute_tour', function (require) {
+"use strict";
+
+var tour = require('web_tour.tour');
+
+tour.register('sale_product_configurator_single_custom_attribute_tour', {
+ url: "/web",
+ test: true,
+}, [tour.stepUtils.showAppsMenuItem(), {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'community'
+}, {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'enterprise'
+}, {
+ trigger: ".o_list_button_add",
+ extra_trigger: ".o_sale_order"
+}, {
+ trigger: "a:contains('Add a product')"
+}, {
+ trigger: 'div[name="product_template_id"] input',
+ run: function (){
+ var $input = $('div[name="product_template_id"] input');
+ $input.click();
+ $input.val('Custo');
+ // fake keydown to trigger search
+ var keyDownEvent = jQuery.Event("keydown");
+ keyDownEvent.which = 42;
+ $input.trigger(keyDownEvent);
+ }
+}, {
+ trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")',
+ run: 'click'
+}, {
+ trigger: '.configurator_container span:contains("Aluminium")',
+ run: function () {
+ // used to check that the radio is NOT rendered
+ if ($('.configurator_container ul[data-attribute_id].d-none input[data-value_name="single product attribute value"]').length === 1) {
+ $('.configurator_container').addClass('tour_success');
+ }
+ }
+}, {
+ trigger: '.configurator_container.tour_success',
+ run: function () {
+ //check
+ }
+}, {
+ trigger: '.configurator_container .variant_custom_value',
+ run: 'text great single custom value'
+}, {
+ trigger: '.o_sale_product_configurator_add',
+}, {
+ trigger: 'button span:contains(Confirm)',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ trigger: 'td.o_data_cell:contains("single product attribute value: great single custom value")',
+ extra_trigger: 'div[name="order_line"]',
+ run: function (){} // check custom value
+}, {
+ trigger: 'td.o_product_configurator_cell',
+}, {
+ trigger: '.o_edit_product_configuration',
+}, {
+ trigger: '.configurator_container .variant_custom_value',
+ run: function () {
+ // check custom value initialized
+ if ($('.configurator_container .variant_custom_value').val() === "great single custom value") {
+ $('.configurator_container').addClass('tour_success_2');
+ }
+ }
+}, {
+ trigger: '.configurator_container.tour_success_2',
+ run: function () {
+ //check
+ }
+}]);
+
+});
diff --git a/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js b/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js
new file mode 100644
index 00000000..fad1fbd3
--- /dev/null
+++ b/addons/sale_product_configurator/static/tests/tours/product_configurator_ui.js
@@ -0,0 +1,95 @@
+odoo.define('sale.product_configurator_tour', function (require) {
+"use strict";
+
+var tour = require('web_tour.tour');
+
+// Note: please keep this test without pricelist for maximum coverage.
+// The pricelist is tested on the other tours.
+
+tour.register('sale_product_configurator_tour', {
+ url: "/web",
+ test: true,
+}, [tour.stepUtils.showAppsMenuItem(), {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'community'
+}, {
+ trigger: '.o_app[data-menu-xmlid="sale.sale_menu_root"]',
+ edition: 'enterprise'
+}, {
+ trigger: ".o_list_button_add",
+ extra_trigger: ".o_sale_order"
+}, {
+ trigger: "a:contains('Add a product')",
+}, {
+ trigger: 'div[name="product_template_id"] input',
+ run: function (){
+ var $input = $('div[name="product_template_id"] input');
+ $input.click();
+ $input.val('Custo');
+ // fake keydown to trigger search
+ var keyDownEvent = jQuery.Event("keydown");
+ keyDownEvent.which = 42;
+ $input.trigger(keyDownEvent);
+ }
+}, {
+ trigger: 'ul.ui-autocomplete a:contains("Customizable Desk (TEST)")',
+ run: 'click'
+}, {
+ trigger: '.configurator_container span:contains("Steel")',
+ run: function () {},
+}, {
+ trigger: '.configurator_container span:contains("Aluminium")',
+ run: 'click'
+}, {
+ trigger: 'span.oe_currency_value:contains("800.40")',
+ run: function (){} // check updated price
+}, {
+ trigger: 'input[data-value_name="Black"]'
+}, {
+ trigger: '.o_sale_product_configurator_add.disabled'
+}, {
+ trigger: 'input[data-value_name="White"]'
+}, {
+ trigger: '.o_sale_product_configurator_add:not(.disabled)'
+}, {
+ trigger: 'span:contains("Aluminium")',
+ extra_trigger: '.oe_optional_products_modal',
+ run: 'click'
+}, {
+ trigger: '.js_product:has(strong:contains(Conference Chair)) .js_add',
+ extra_trigger: '.oe_optional_products_modal .js_product:has(strong:contains(Conference Chair))',
+ run: 'click'
+}, {
+ trigger: '.js_product:has(strong:contains(Chair floor protection)) .js_add',
+ extra_trigger: '.oe_optional_products_modal .js_product:has(strong:contains(Chair floor protection))',
+ run: 'click'
+}, {
+ trigger: 'button span:contains(Confirm)',
+ extra_trigger: '.oe_optional_products_modal',
+ id: "quotation_product_selected",
+ run: 'click'
+},
+// check that 3 products were added to the SO
+{
+ trigger: 'td.o_data_cell:contains("Customizable Desk (TEST) (Aluminium, White)")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){}
+}, {
+ trigger: 'td.o_data_cell:contains("Conference Chair (TEST) (Aluminium)")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){}
+}, {
+ trigger: 'td.o_data_cell:contains("Chair floor protection")',
+ extra_trigger: 'div[name="order_line"]',
+ in_modal: false,
+ run: function (){}
+}, {
+ trigger: '.o_readonly_modifier[name=amount_total]:contains("0.00")',
+ in_modal: false,
+ run: function (){}
+}
+]);
+
+});
diff --git a/addons/sale_product_configurator/tests/__init__.py b/addons/sale_product_configurator/tests/__init__.py
new file mode 100644
index 00000000..2b67147c
--- /dev/null
+++ b/addons/sale_product_configurator/tests/__init__.py
@@ -0,0 +1,5 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import common
+from . import test_sale_product_configurator_ui
diff --git a/addons/sale_product_configurator/tests/common.py b/addons/sale_product_configurator/tests/common.py
new file mode 100644
index 00000000..252fda2b
--- /dev/null
+++ b/addons/sale_product_configurator/tests/common.py
@@ -0,0 +1,114 @@
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+import base64
+
+from odoo.tests.common import SavepointCase
+from odoo.modules.module import get_module_resource
+
+
+class TestProductConfiguratorCommon(SavepointCase):
+
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ # Setup attributes and attributes values
+ cls.product_attribute_1 = cls.env['product.attribute'].create({
+ 'name': 'Legs',
+ 'sequence': 10,
+ })
+ product_attribute_value_1 = cls.env['product.attribute.value'].create({
+ 'name': 'Steel',
+ 'attribute_id': cls.product_attribute_1.id,
+ 'sequence': 1,
+ })
+ product_attribute_value_2 = cls.env['product.attribute.value'].create({
+ 'name': 'Aluminium',
+ 'attribute_id': cls.product_attribute_1.id,
+ 'sequence': 2,
+ })
+ product_attribute_2 = cls.env['product.attribute'].create({
+ 'name': 'Color',
+ 'sequence': 20,
+ })
+ product_attribute_value_3 = cls.env['product.attribute.value'].create({
+ 'name': 'White',
+ 'attribute_id': product_attribute_2.id,
+ 'sequence': 1,
+ })
+ product_attribute_value_4 = cls.env['product.attribute.value'].create({
+ 'name': 'Black',
+ 'attribute_id': product_attribute_2.id,
+ 'sequence': 2,
+ })
+
+ # Create product template
+ cls.product_product_custo_desk = cls.env['product.template'].create({
+ 'name': 'Customizable Desk (TEST)',
+ 'standard_price': 500.0,
+ 'list_price': 750.0,
+ })
+
+ # Generate variants
+ cls.env['product.template.attribute.line'].create([{
+ 'product_tmpl_id': cls.product_product_custo_desk.id,
+ 'attribute_id': cls.product_attribute_1.id,
+ 'value_ids': [(4, product_attribute_value_1.id), (4, product_attribute_value_2.id)],
+ }, {
+ 'product_tmpl_id': cls.product_product_custo_desk.id,
+ 'attribute_id': product_attribute_2.id,
+ 'value_ids': [(4, product_attribute_value_3.id), (4, product_attribute_value_4.id)],
+
+ }])
+
+ # Apply a price_extra for the attribute Aluminium
+ cls.product_product_custo_desk.attribute_line_ids[0].product_template_value_ids[1].price_extra = 50.40
+
+ # Add a Custom attribute
+ product_attribute_value_custom = cls.env['product.attribute.value'].create({
+ 'name': 'Custom',
+ 'attribute_id': cls.product_attribute_1.id,
+ 'sequence': 3,
+ 'is_custom': True
+ })
+ cls.product_product_custo_desk.attribute_line_ids[0].write({'value_ids': [(4, product_attribute_value_custom.id)]})
+
+ # Disable the aluminium + black product
+ cls.product_product_custo_desk.product_variant_ids[3].active = False
+
+ # Setup a first optional product
+ img_path = get_module_resource('product', 'static', 'img', 'product_product_11-image.png')
+ img_content = base64.b64encode(open(img_path, "rb").read())
+ cls.product_product_conf_chair = cls.env['product.template'].create({
+ 'name': 'Conference Chair (TEST)',
+ 'image_1920': img_content,
+ 'list_price': 16.50,
+ })
+
+ cls.env['product.template.attribute.line'].create({
+ 'product_tmpl_id': cls.product_product_conf_chair.id,
+ 'attribute_id': cls.product_attribute_1.id,
+ 'value_ids': [(4, product_attribute_value_1.id), (4, product_attribute_value_2.id)],
+ })
+ cls.product_product_conf_chair.attribute_line_ids[0].product_template_value_ids[1].price_extra = 6.40
+ cls.product_product_custo_desk.optional_product_ids = [(4, cls.product_product_conf_chair.id)]
+
+ # Setup a second optional product
+ cls.product_product_conf_chair_floor_protect = cls.env['product.template'].create({
+ 'name': 'Chair floor protection',
+ 'list_price': 12.0,
+ })
+ cls.product_product_conf_chair.optional_product_ids = [(4, cls.product_product_conf_chair_floor_protect.id)]
+
+
+ def _create_pricelist(cls, pricelists):
+ for pricelist in pricelists:
+ if not pricelist.item_ids.filtered(lambda i: i.product_tmpl_id == cls.product_product_custo_desk and i.price_discount == 20):
+ cls.env['product.pricelist.item'].create({
+ 'base': 'list_price',
+ 'applied_on': '1_product',
+ 'pricelist_id': pricelist.id,
+ 'product_tmpl_id': cls.product_product_custo_desk.id,
+ 'price_discount': 20,
+ 'min_quantity': 2,
+ 'compute_price': 'formula',
+ })
+ pricelist.discount_policy = 'without_discount'
diff --git a/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py b/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py
new file mode 100644
index 00000000..009c2de6
--- /dev/null
+++ b/addons/sale_product_configurator/tests/test_sale_product_configurator_ui.py
@@ -0,0 +1,171 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import odoo.tests
+from .common import TestProductConfiguratorCommon
+
+
+@odoo.tests.tagged('post_install', '-at_install')
+class TestUi(odoo.tests.HttpSavepointCase, TestProductConfiguratorCommon):
+
+ def setUp(self):
+ super(TestUi, self).setUp()
+ self.custom_pricelist = self.env['product.pricelist'].create({
+ 'name': 'Custom pricelist (TEST)',
+ 'item_ids': [(0, 0, {
+ 'base': 'list_price',
+ 'applied_on': '1_product',
+ 'product_tmpl_id': self.product_product_custo_desk.id,
+ 'price_discount': 20,
+ 'min_quantity': 2,
+ 'compute_price': 'formula'
+ })]
+ })
+
+ def test_01_product_configurator(self):
+ # To be able to test the product configurator, admin user must have access to "variants" feature, so we give him the right group for that
+ self.env.ref('base.user_admin').write({'groups_id': [(4, self.env.ref('product.group_product_variant').id)]})
+ self.start_tour("/web", 'sale_product_configurator_tour', login="admin")
+
+ def test_02_product_configurator_advanced(self):
+ # group_product_variant: use the product configurator
+ # group_sale_pricelist: display the pricelist to determine when it is changed after choosing
+ # group_delivery_invoice_address: show the shipping address (needed for a trigger)
+ # the partner
+ self.env.ref('base.user_admin').write({
+ 'groups_id': [
+ (4, self.env.ref('product.group_product_variant').id),
+ (4, self.env.ref('product.group_product_pricelist').id),
+ (4, self.env.ref('sale.group_delivery_invoice_address').id),
+ ],
+ })
+
+ # Prepare relevant test data
+ # This is not included in demo data to avoid useless noise
+ product_attributes = self.env['product.attribute'].create([{
+ 'name': 'PA1',
+ 'display_type': 'radio',
+ 'create_variant': 'dynamic'
+ }, {
+ 'name': 'PA2',
+ 'display_type': 'radio',
+ 'create_variant': 'always'
+ }, {
+ 'name': 'PA3',
+ 'display_type': 'radio',
+ 'create_variant': 'dynamic'
+ }, {
+ 'name': 'PA4',
+ 'display_type': 'select',
+ 'create_variant': 'no_variant'
+ }, {
+ 'name': 'PA5',
+ 'display_type': 'select',
+ 'create_variant': 'no_variant'
+ }, {
+ 'name': 'PA7',
+ 'display_type': 'color',
+ 'create_variant': 'no_variant'
+ }, {
+ 'name': 'PA8',
+ 'display_type': 'radio',
+ 'create_variant': 'no_variant'
+ }])
+
+ self.env['product.attribute.value'].create([{
+ 'name': 'PAV' + str(i),
+ 'is_custom': i == 9,
+ 'attribute_id': product_attribute.id
+ } for i in range(1, 11) for product_attribute in product_attributes])
+
+ product_template = self.product_product_custo_desk
+
+ self.env['product.template.attribute.line'].create([{
+ 'attribute_id': product_attribute.id,
+ 'product_tmpl_id': product_template.id,
+ 'value_ids': [(6, 0, product_attribute.value_ids.ids)],
+ } for product_attribute in product_attributes])
+ self.start_tour("/web", 'sale_product_configurator_advanced_tour', login="admin")
+
+ def test_03_product_configurator_edition(self):
+ # To be able to test the product configurator, admin user must have access to "variants" feature, so we give him the right group for that
+ self.env.ref('base.user_admin').write({'groups_id': [(4, self.env.ref('product.group_product_variant').id)]})
+ self.start_tour("/web", 'sale_product_configurator_edition_tour', login="admin")
+
+ def test_04_product_configurator_single_custom_value(self):
+ # group_product_variant: use the product configurator
+ # group_sale_pricelist: display the pricelist to determine when it is changed after choosing
+ # the partner
+ self.env.ref('base.user_admin').write({
+ 'groups_id': [
+ (4, self.env.ref('product.group_product_variant').id),
+ (4, self.env.ref('product.group_product_pricelist').id),
+ ],
+ })
+
+ # Prepare relevant test data
+ # This is not included in demo data to avoid useless noise
+ product_attributes = self.env['product.attribute'].create([{
+ 'name': 'product attribute',
+ 'display_type': 'radio',
+ 'create_variant': 'always'
+ }])
+
+ product_attribute_values = self.env['product.attribute.value'].create([{
+ 'name': 'single product attribute value',
+ 'is_custom': True,
+ 'attribute_id': product_attributes[0].id
+ }])
+
+ product_template = self.product_product_custo_desk
+
+ self.env['product.template.attribute.line'].create([{
+ 'attribute_id': product_attributes[0].id,
+ 'product_tmpl_id': product_template.id,
+ 'value_ids': [(6, 0, [product_attribute_values[0].id])]
+ }])
+ self.start_tour("/web", 'sale_product_configurator_single_custom_attribute_tour', login="admin")
+
+ def test_05_product_configurator_pricelist(self):
+ """The goal of this test is to make sure pricelist rules are correctly
+ applied on the backend product configurator.
+ Also testing B2C setting: no impact on the backend configurator.
+ """
+
+ admin = self.env.ref('base.user_admin')
+
+ # Activate B2C
+ self.env.ref('account.group_show_line_subtotals_tax_excluded').users -= admin
+ self.env.ref('account.group_show_line_subtotals_tax_included').users |= admin
+
+ # Active pricelist on SO
+ self.env.ref('product.group_product_pricelist').users |= admin
+
+ # Add a 15% tax on desk
+ tax = self.env['account.tax'].create({'name': "Test tax", 'amount': 15})
+ self.product_product_custo_desk.taxes_id = tax
+
+ # Remove tax from Conference Chair and Chair floor protection
+ self.product_product_conf_chair.taxes_id = None
+ self.product_product_conf_chair_floor_protect.taxes_id = None
+ self.start_tour("/web", 'sale_product_configurator_pricelist_tour', login="admin")
+
+ def test_06_product_configurator_optional_products(self):
+ """The goal of this test is to check that the product configurator
+ window opens correctly and lets you select optional products even
+ if the main product does not have variants.
+ """
+ # add an optional product to the office chair and the custo desk for testing purposes
+ office_chair = self.env['product.product'].create({
+ 'name': 'Office Chair Black',
+ })
+
+ custo_desk = self.product_product_custo_desk.product_variant_ids[0]
+ office_chair.update({
+ 'optional_product_ids': [(6, 0, [self.product_product_conf_chair_floor_protect.id])]
+ })
+ custo_desk.update({
+ 'optional_product_ids': [(6, 0, [office_chair.product_tmpl_id.id, self.product_product_conf_chair.id])]
+ })
+ self.product_product_custo_desk.optional_product_ids = [(4, self.product_product_conf_chair.id)]
+ self.start_tour("/web", 'sale_product_configurator_optional_products_tour', login="admin")
diff --git a/addons/sale_product_configurator/views/assets.xml b/addons/sale_product_configurator/views/assets.xml
new file mode 100644
index 00000000..5665e7dd
--- /dev/null
+++ b/addons/sale_product_configurator/views/assets.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <template id="assets_backend" inherit_id="web.assets_backend" name="sale_product_configurator assets backend">
+ <xpath expr="script[last()]" position="after">
+ <script type="text/javascript" src="/sale/static/src/js/variant_mixin.js"></script>
+ <script type="text/javascript" src="/sale_product_configurator/static/src/js/product_configurator_renderer.js"></script>
+ <script type="text/javascript" src="/sale_product_configurator/static/src/js/product_configurator_controller.js"></script>
+ <script type="text/javascript" src="/sale_product_configurator/static/src/js/product_configurator_view.js"></script>
+ <script type="text/javascript" src="/sale_product_configurator/static/src/js/product_configurator_widget.js"/>
+ <script type="text/javascript" src="/sale_product_configurator/static/src/js/product_configurator_modal.js"></script>
+ </xpath>
+ </template>
+ <template id="assets_tests" name="Sale Product Configurator Assets Tests" inherit_id="web.assets_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/tours/product_configurator_ui.js"/>
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/tours/product_configurator_advanced_ui.js"/>
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/tours/product_configurator_edition_ui.js"/>
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/tours/product_configurator_single_custom_attribute_ui.js"/>
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/tours/product_configurator_pricelist_ui.js"/>
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/tours/product_configurator_optional_products_ui.js"/>
+ </xpath>
+ </template>
+ <template id="qunit_suite" inherit_id="web.qunit_suite_tests" name="sale_product_configurator_tests">
+ <xpath expr="." position="inside">
+ <script type="text/javascript" src="/sale_product_configurator/static/tests/product_configurator.test.js"></script>
+ </xpath>
+ </template>
+</odoo>
diff --git a/addons/sale_product_configurator/views/sale_views.xml b/addons/sale_product_configurator/views/sale_views.xml
new file mode 100644
index 00000000..3e55deb1
--- /dev/null
+++ b/addons/sale_product_configurator/views/sale_views.xml
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="product_template_view_form" model="ir.ui.view">
+ <field name="name">product.template.form.inherit.sale.product.configurator</field>
+ <field name="model">product.template</field>
+ <field name="inherit_id" ref="product.product_template_form_view"/>
+ <field name="arch" type="xml">
+ <xpath expr="//group[@name='sale']" position="after">
+ <group name="options" groups="product.group_product_variant">
+ <group string="Options">
+ <field name="optional_product_ids" widget="many2many_tags" options="{'color_field': 'color'}" domain="[('id', '!=', active_id), '|', ('company_id', '=', company_id), ('company_id', '=', False)]" />
+ </group>
+ </group>
+ </xpath>
+ </field>
+ </record>
+
+ <record id="sale_order_view_form" model="ir.ui.view">
+ <field name="name">sale.order.form.inherit.sale.product.configurator</field>
+ <field name="model">sale.order</field>
+ <field name="inherit_id" ref="sale.view_order_form"/>
+ <field name="arch" type="xml">
+ <xpath expr="//tree/field[@name='product_template_id']" position="attributes">
+ <attribute name="invisible">0</attribute>
+ </xpath>
+ <xpath expr="//tree/field[@name='product_template_id']" position="after">
+ <field name="product_template_attribute_value_ids" invisible="1" />
+ <field name="product_custom_attribute_value_ids" invisible="1" >
+ <tree>
+ <field name="custom_product_template_attribute_value_id" />
+ <field name="custom_value" />
+ </tree>
+ </field>
+ <field name="product_no_variant_attribute_value_ids" invisible="1" />
+ <field name="is_configurable_product" invisible="1" />
+ </xpath>
+ <xpath expr="//tree/field[@name='product_id']" position="attributes">
+ <attribute name="optional">hide</attribute>
+ <attribute name="string">Product Variant</attribute>
+ </xpath>
+ </field>
+ </record>
+</odoo>
diff --git a/addons/sale_product_configurator/views/templates.xml b/addons/sale_product_configurator/views/templates.xml
new file mode 100644
index 00000000..11ad527c
--- /dev/null
+++ b/addons/sale_product_configurator/views/templates.xml
@@ -0,0 +1,220 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <template id="optional_products_modal" name="Optional Products">
+ <main class="modal-body">
+ <t t-call="sale_product_configurator.configure_optional_products" />
+ </main>
+ </template>
+
+ <!-- backend -->
+ <template id="configure" name="Configure">
+ <div class="js_product main_product">
+
+ <t t-set="combination" t-value="product_combination if product_combination else product._get_first_possible_combination()"/>
+ <t t-set="combination_info" t-value="product._get_combination_info(combination, add_qty=add_qty or 1, pricelist=pricelist)"/>
+ <t t-set="product_variant" t-value="product.env['product.product'].browse(combination_info['product_id'])"/>
+
+ <input type="hidden" class="product_template_id" t-att-value="product.id"/>
+ <input type="hidden" class="product_id" t-attf-name="product_id" t-att-value="product_variant.id"/>
+ <div class="col-lg-12 text-center mt-5">
+ <t t-if="product._is_add_to_cart_possible()">
+ <div class="col-lg-5 d-inline-block text-left">
+ <t t-if="combination" t-call="sale.variants">
+ <t t-set="parent_combination" t-value="None"/>
+ </t>
+ <h2>
+ <span t-attf-class="text-danger oe_default_price oe_striked_price {{'' if combination_info['has_discounted_price'] else 'd-none'}}"
+ t-esc="combination_info['list_price']"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'/>
+ <span class="oe_price product_id mt-3" style="white-space: nowrap;"
+ t-att-data-product-id="product.id"
+ t-esc="combination_info['price']"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'/>
+ </h2>
+ <div class="css_quantity input-group" t-if="product.visible_qty_configurator">
+ <div class="input-group-prepend">
+ <button t-attf-href="#" class="btn btn-primary js_add_cart_json d-none d-md-inline-block" aria-label="Remove one" title="Remove one">
+ <i class="fa fa-minus"></i>
+ </button>
+ </div>
+ <input type="text" class="js_quantity form-control quantity" data-min="1" name="add_qty" t-att-value="add_qty or 1"/>
+ <div class="input-group-append">
+ <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>
+ </div>
+ <p class="css_not_available_msg alert alert-warning">This combination does not exist.</p>
+ </div>
+ <div class="col-lg-1 d-inline-block"></div>
+ <div class="col-lg-5 d-inline-block align-top text-left">
+ <img t-if="product_variant" t-att-src="'/web/image/product.product/%s/image_1024' % product_variant.id" class="d-block product_detail_img" alt="Product Image"/>
+ <img t-else="" t-att-src="'/web/image/product.template/%s/image_1024' % product.id" class="d-block product_detail_img" alt="Product Image"/>
+ </div>
+ </t>
+ <t t-else="">
+ <div class="col-lg-5 d-inline-block text-left">
+ <p class="alert alert-warning">This product has no valid combination.</p>
+ </div>
+ </t>
+ </div>
+ </div>
+ </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">Product</th>
+ <th></th>
+ <th class="text-center td-qty">Quantity</th>
+ <th class="text-center td-price">Price</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr class="js_product in_cart main_product">
+
+ <t t-set="combination_info" t-value="product.product_tmpl_id._get_combination_info(combination, product.id, add_qty or 1, pricelist)"/>
+ <t t-set="product_variant" t-value="product.env['product.product'].browse(combination_info['product_id'])"/>
+
+ <input type="hidden" class="product_template_id" t-att-value="product.product_tmpl_id.id"/>
+ <input type="hidden" class="product_id" t-att-value="product_variant.id"/>
+ <td class='td-img'>
+ <img t-if="product_variant" t-att-src="'/web/image/product.product/%s/image_128' % product_variant.id" alt="Product Image"/>
+ <img t-else="" t-att-src="'/web/image/product.template/%s/image_128' % product.id" alt="Product Image"/>
+ </td>
+ <td class='td-product_name'>
+ <strong t-esc="combination_info['display_name']"/>
+ <div class="text-muted small">
+ <div t-field="product.description_sale"/>
+ <div class="js_attributes"/>
+ </div>
+ </td>
+ <td class="text-center td-qty">
+ <div class="css_quantity input-group">
+ <div class="input-group-prepend">
+ <button t-attf-href="#" class="btn btn-primary js_add_cart_json d-none d-md-inline-block" aria-label="Remove one" title="Remove one">
+ <i class="fa fa-minus"></i>
+ </button>
+ </div>
+ <input type="text" class="js_quantity form-control quantity" data-min="1" name="add_qty" t-att-value="add_qty or 1"/>
+ <div class="input-group-append">
+ <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>
+ </div>
+ </td>
+ <td class="text-center td-price" name="price">
+ <ul class="d-none js_add_cart_variants" t-att-data-attribute_exclusions="{'exclusions: []'}"></ul>
+ <div class="d-none oe_unchanged_value_ids" t-att-data-unchanged_value_ids="variant_values" ></div>
+ <div t-attf-class="text-danger oe_default_price oe_striked_price {{'' if combination_info['has_discounted_price'] else 'd-none'}}"
+ t-esc="combination_info['list_price']"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'
+ />
+ <span class="oe_price product_id" style="white-space: nowrap;"
+ t-att-data-product-id="product.id"
+ t-esc="combination_info['price']"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'/>
+ <span class="js_raw_price d-none" t-esc="product.price"/>
+ </td>
+ </tr>
+ <tr class="o_total_row">
+ <td colspan="4" class="text-right">
+ <strong>Total:</strong>
+ <span class="js_price_total font-weight-bold" style="white-space: nowrap;"
+ t-att-data-product-id="product.id"
+ t-esc="combination_info['price'] * (add_qty or 1)"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'/>
+ </td>
+ </tr>
+ <tr t-if="product.optional_product_ids" class="o_select_options"><td colspan="4"><h4>Available Options:</h4></td></tr>
+ <t t-call="sale_product_configurator.optional_product_items">
+ <t t-set="parent_combination" t-value="combination"/>
+ </t>
+ </tbody>
+ </table>
+ </template>
+
+ <!-- modal: optional products -->
+ <template id="optional_product_items">
+ <t t-foreach="product.optional_product_ids" t-as="product">
+ <t t-set="combination" t-value="product._get_first_possible_combination(parent_combination)"/>
+ <t t-if="product._is_add_to_cart_possible(parent_combination)">
+
+ <t t-set="combination_info" t-value="product._get_combination_info(combination, add_qty=add_qty or 1, pricelist=pricelist)"/>
+ <t t-set="product_variant" t-value="product.env['product.product'].browse(combination_info['product_id'])"/>
+
+ <tr class="js_product">
+ <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="float-left">
+ <strong class="product-name product_display_name" t-esc="combination_info['display_name']"/>
+ <div class="text-muted small" t-field="product.description_sale"/>
+ </div>
+ <div class="float-right">
+ <t t-call="sale.variants"/>
+ </div>
+ </td>
+ <td class="text-center td-qty d-none">
+ <div class="css_quantity input-group">
+ <div class="input-group-prepend">
+ <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>
+ </div>
+ <input type="text" class="js_quantity form-control quantity" data-min="1" name="add_qty" t-att-value="add_qty or 1"/>
+ <div class="input-group-append">
+ <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>
+ </div>
+ </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-esc="combination_info['list_price']"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'/>
+ <div class="oe_price" style="white-space: nowrap;"
+ t-esc="combination_info['price']"
+ t-options='{
+ "widget": "monetary",
+ "display_currency": (pricelist or product).currency_id
+ }'/>
+ <span class="js_raw_price d-none" t-esc="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>
diff --git a/addons/sale_product_configurator/wizard/__init__.py b/addons/sale_product_configurator/wizard/__init__.py
new file mode 100644
index 00000000..a0eaada8
--- /dev/null
+++ b/addons/sale_product_configurator/wizard/__init__.py
@@ -0,0 +1,4 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from . import sale_product_configurator
diff --git a/addons/sale_product_configurator/wizard/sale_product_configurator.py b/addons/sale_product_configurator/wizard/sale_product_configurator.py
new file mode 100644
index 00000000..4d636383
--- /dev/null
+++ b/addons/sale_product_configurator/wizard/sale_product_configurator.py
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from odoo import models, fields
+
+
+class SaleProductConfigurator(models.TransientModel):
+ _name = 'sale.product.configurator'
+ _description = 'Sale Product Configurator'
+
+ product_template_id = fields.Many2one(
+ 'product.template', string="Product",
+ required=True, domain=[('sale_ok', '=', True), ('attribute_line_ids.value_ids', '!=', False)])
+ quantity = fields.Integer('Quantity')
+ pricelist_id = fields.Many2one('product.pricelist', 'Pricelist', readonly=True)
+ product_template_attribute_value_ids = fields.Many2many(
+ 'product.template.attribute.value', 'product_configurator_template_attribute_value_rel', string='Attribute Values', readonly=True)
+ product_custom_attribute_value_ids = fields.Many2many(
+ 'product.attribute.custom.value', 'product_configurator_custom_attribute_value_rel', string="Custom Values")
+ product_no_variant_attribute_value_ids = fields.Many2many(
+ 'product.template.attribute.value', 'product_configurator_no_variant_attribute_value_rel', string="Extra Values")
diff --git a/addons/sale_product_configurator/wizard/sale_product_configurator_views.xml b/addons/sale_product_configurator/wizard/sale_product_configurator_views.xml
new file mode 100644
index 00000000..8c7cf016
--- /dev/null
+++ b/addons/sale_product_configurator/wizard/sale_product_configurator_views.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<odoo>
+ <record id="sale_product_configurator_view_form" model="ir.ui.view">
+ <field name="name">sale_product_configurator.product.configurator.view.form</field>
+ <field name="model">sale.product.configurator</field>
+ <field name="arch" type="xml">
+ <form js_class="product_configurator_form">
+ <group>
+ <field name="product_template_id" class="oe_product_configurator_product_template_id" />
+ <field name="product_template_attribute_value_ids" invisible="1">
+ <tree limit="10000"/>
+ </field>
+ <field name="product_custom_attribute_value_ids" invisible="1" widget="one2many" >
+ <tree limit="10000">
+ <field name="custom_product_template_attribute_value_id"/>
+ <field name="custom_value"/>
+ </tree>
+ </field>
+ <field name="product_no_variant_attribute_value_ids" invisible="1">
+ <tree limit="10000"/>
+ </field>
+ <field name="quantity" invisible="1" />
+ </group>
+ <footer>
+ <button string="Add" class="btn-primary o_sale_product_configurator_add" special="add"/>
+ <button string="Save" class="btn-primary o_sale_product_configurator_edit" style="display: none;" special="save"/>
+ <button string="Cancel" class="btn-secondary" special="cancel"/>
+ </footer>
+ </form>
+ </field>
+ </record>
+
+ <record id="sale_product_configurator_action" model="ir.actions.act_window">
+ <field name="name">Configure a product</field>
+ <field name="res_model">sale.product.configurator</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ <field name="view_id" ref="sale_product_configurator_view_form"/>
+ </record>
+</odoo>