From 8d16ff38b466905fbed20614c6d212874c2b4205 Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Wed, 19 Feb 2025 14:17:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D0=BE=D0=B5=20=D0=BD=D0=B0=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __init__.py | 4 + __manifest__.py | 31 ++ controllers/__init__.py | 3 + controllers/main.py | 347 ++++++++++++++ data/sale_demo.xml | 25 + i18n/ar.po | 180 ++++++++ i18n/bg.po | 185 ++++++++ i18n/ca.po | 188 ++++++++ i18n/cs.po | 181 ++++++++ i18n/da.po | 179 +++++++ i18n/de.po | 181 ++++++++ i18n/es.po | 181 ++++++++ i18n/es_419.po | 181 ++++++++ i18n/et.po | 187 ++++++++ i18n/fa.po | 181 ++++++++ i18n/fi.po | 185 ++++++++ i18n/fr.po | 180 ++++++++ i18n/he.po | 183 ++++++++ i18n/hr.po | 170 +++++++ i18n/hu.po | 185 ++++++++ i18n/id.po | 180 ++++++++ i18n/it.po | 180 ++++++++ i18n/ja.po | 179 +++++++ i18n/ko.po | 180 ++++++++ i18n/lb.po | 162 +++++++ i18n/lt.po | 180 ++++++++ i18n/lv.po | 181 ++++++++ i18n/mn.po | 169 +++++++ i18n/nb.po | 169 +++++++ i18n/nl.po | 180 ++++++++ i18n/pl.po | 179 +++++++ i18n/pt.po | 176 +++++++ i18n/pt_BR.po | 180 ++++++++ i18n/ro.po | 170 +++++++ i18n/ru.po | 182 ++++++++ i18n/sale_product_configurator.pot | 172 +++++++ i18n/sk.po | 178 +++++++ i18n/sl.po | 184 ++++++++ i18n/sr.po | 181 ++++++++ i18n/sv.po | 185 ++++++++ i18n/th.po | 179 +++++++ i18n/tr.po | 189 ++++++++ i18n/uk.po | 179 +++++++ i18n/vi.po | 179 +++++++ i18n/zh_CN.po | 177 +++++++ i18n/zh_TW.po | 177 +++++++ models/__init__.py | 4 + models/product_template.py | 51 ++ models/sale_order_line.py | 16 + .../js/badge_extra_price/badge_extra_price.js | 21 + .../badge_extra_price/badge_extra_price.xml | 9 + static/src/js/product/product.js | 67 +++ static/src/js/product/product.scss | 36 ++ static/src/js/product/product.xml | 78 ++++ .../product_configurator_dialog.js | 436 ++++++++++++++++++ .../product_configurator_dialog.xml | 23 + static/src/js/product_list/product_list.js | 31 ++ static/src/js/product_list/product_list.xml | 25 + .../product_template_attribute_line.js | 147 ++++++ .../product_template_attribute_line.scss | 65 +++ .../product_template_attribute_line.xml | 147 ++++++ static/src/js/sale_product_field.js | 159 +++++++ tests/__init__.py | 1 + tests/common.py | 129 ++++++ tests/test_product_configurator_data.py | 418 +++++++++++++++++ views/product_template_views.xml | 22 + views/sale_order_views.xml | 30 ++ 67 files changed, 9679 insertions(+) create mode 100644 __init__.py create mode 100644 __manifest__.py create mode 100644 controllers/__init__.py create mode 100644 controllers/main.py create mode 100644 data/sale_demo.xml create mode 100644 i18n/ar.po create mode 100644 i18n/bg.po create mode 100644 i18n/ca.po create mode 100644 i18n/cs.po create mode 100644 i18n/da.po create mode 100644 i18n/de.po create mode 100644 i18n/es.po create mode 100644 i18n/es_419.po create mode 100644 i18n/et.po create mode 100644 i18n/fa.po create mode 100644 i18n/fi.po create mode 100644 i18n/fr.po create mode 100644 i18n/he.po create mode 100644 i18n/hr.po create mode 100644 i18n/hu.po create mode 100644 i18n/id.po create mode 100644 i18n/it.po create mode 100644 i18n/ja.po create mode 100644 i18n/ko.po create mode 100644 i18n/lb.po create mode 100644 i18n/lt.po create mode 100644 i18n/lv.po create mode 100644 i18n/mn.po create mode 100644 i18n/nb.po create mode 100644 i18n/nl.po create mode 100644 i18n/pl.po create mode 100644 i18n/pt.po create mode 100644 i18n/pt_BR.po create mode 100644 i18n/ro.po create mode 100644 i18n/ru.po create mode 100644 i18n/sale_product_configurator.pot create mode 100644 i18n/sk.po create mode 100644 i18n/sl.po create mode 100644 i18n/sr.po create mode 100644 i18n/sv.po create mode 100644 i18n/th.po create mode 100644 i18n/tr.po create mode 100644 i18n/uk.po create mode 100644 i18n/vi.po create mode 100644 i18n/zh_CN.po create mode 100644 i18n/zh_TW.po create mode 100644 models/__init__.py create mode 100644 models/product_template.py create mode 100644 models/sale_order_line.py create mode 100644 static/src/js/badge_extra_price/badge_extra_price.js create mode 100644 static/src/js/badge_extra_price/badge_extra_price.xml create mode 100644 static/src/js/product/product.js create mode 100644 static/src/js/product/product.scss create mode 100644 static/src/js/product/product.xml create mode 100644 static/src/js/product_configurator_dialog/product_configurator_dialog.js create mode 100644 static/src/js/product_configurator_dialog/product_configurator_dialog.xml create mode 100644 static/src/js/product_list/product_list.js create mode 100644 static/src/js/product_list/product_list.xml create mode 100644 static/src/js/product_template_attribute_line/product_template_attribute_line.js create mode 100644 static/src/js/product_template_attribute_line/product_template_attribute_line.scss create mode 100644 static/src/js/product_template_attribute_line/product_template_attribute_line.xml create mode 100644 static/src/js/sale_product_field.js create mode 100644 tests/__init__.py create mode 100644 tests/common.py create mode 100644 tests/test_product_configurator_data.py create mode 100644 views/product_template_views.xml create mode 100644 views/sale_order_views.xml diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..aa4d0fd --- /dev/null +++ b/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import controllers +from . import models diff --git a/__manifest__.py b/__manifest__.py new file mode 100644 index 0000000..fdee0cc --- /dev/null +++ b/__manifest__.py @@ -0,0 +1,31 @@ +# -*- 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: +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': [ + 'views/product_template_views.xml', + 'views/sale_order_views.xml', + ], + 'demo': [ + 'data/sale_demo.xml', + ], + 'assets': { + 'web.assets_backend': [ + 'sale_product_configurator/static/src/**/*', + ], + }, + 'auto_install': True, + 'license': 'LGPL-3', +} diff --git a/controllers/__init__.py b/controllers/__init__.py new file mode 100644 index 0000000..80ee4da --- /dev/null +++ b/controllers/__init__.py @@ -0,0 +1,3 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import main diff --git a/controllers/main.py b/controllers/main.py new file mode 100644 index 0000000..0a86b29 --- /dev/null +++ b/controllers/main.py @@ -0,0 +1,347 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from datetime import datetime + +from odoo.http import Controller, request, route + + +class ProductConfiguratorController(Controller): + + @route('/sale_product_configurator/get_values', type='json', auth='user') + def get_product_configurator_values( + self, + product_template_id, + quantity, + currency_id, + so_date, + product_uom_id=None, + company_id=None, + pricelist_id=None, + ptav_ids=None, + only_main_product=False, + ): + """ Return all product information needed for the product configurator. + + :param int product_template_id: The product for which to seek information, as a + `product.template` id. + :param int quantity: The quantity of the product. + :param int currency_id: The currency of the transaction, as a `res.currency` id. + :param str so_date: The date of the `sale.order`, to compute the price at the right rate. + :param int|None product_uom_id: The unit of measure of the product, as a `uom.uom` id. + :param int|None company_id: The company to use, as a `res.company` id. + :param int|None pricelist_id: The pricelist to use, as a `product.pricelist` id. + :param recordset|None product_template_attribute_value_ids: The combination of the product, + as a `product.template.attribute + .value` recordset. + :param bool only_main_product: Whether the optional products should be included or not. + :rtype: dict + :return: A dict containing a list of products and a list of optional products information, + generated by :meth:`_get_product_information`. + """ + if company_id: + request.update_context(allowed_company_ids=[company_id]) + product_template = request.env['product.template'].browse(product_template_id) + + combination = request.env['product.template.attribute.value'] + if ptav_ids: + combination = request.env['product.template.attribute.value'].browse(ptav_ids).filtered( + lambda ptav: ptav.product_tmpl_id.id == product_template_id + ) + # Set missing attributes (unsaved no_variant attributes, or new attribute on existing product) + unconfigured_ptals = ( + product_template.attribute_line_ids - combination.attribute_line_id).filtered( + lambda ptal: ptal.attribute_id.display_type != 'multi') + combination += unconfigured_ptals.mapped( + lambda ptal: ptal.product_template_value_ids._only_active()[:1] + ) + if not combination: + combination = product_template._get_first_possible_combination() + + return dict( + products=[ + dict( + **self._get_product_information( + product_template, + combination, + currency_id, + so_date, + quantity=quantity, + product_uom_id=product_uom_id, + pricelist_id=pricelist_id, + ), + parent_product_tmpl_ids=[], + ) + ], + optional_products=[ + dict( + **self._get_product_information( + optional_product_template, + optional_product_template._get_first_possible_combination( + parent_combination=combination + ), + currency_id, + so_date, + # giving all the ptav of the parent product to get all the exclusions + parent_combination=product_template.attribute_line_ids.\ + product_template_value_ids, + pricelist_id=pricelist_id, + ), + parent_product_tmpl_ids=[product_template.id], + ) for optional_product_template in product_template.optional_product_ids + ] if not only_main_product else [] + ) + + @route('/sale_product_configurator/create_product', type='json', auth='user') + def sale_product_configurator_create_product(self, product_template_id, combination): + """ Create the product when there is a dynamic attribute in the combination. + + :param int product_template_id: The product for which to seek information, as a + `product.template` id. + :param recordset combination: The combination of the product, as a + `product.template.attribute.value` recordset. + :rtype: int + :return: The product created, as a `product.product` id. + """ + product_template = request.env['product.template'].browse(product_template_id) + combination = request.env['product.template.attribute.value'].browse(combination) + product = product_template._create_product_variant(combination) + return product.id + + @route('/sale_product_configurator/update_combination', type='json', auth='user') + def sale_product_configurator_update_combination( + self, + product_template_id, + combination, + currency_id, + so_date, + quantity, + product_uom_id=None, + company_id=None, + pricelist_id=None, + ): + """ Return the updated combination information. + + :param int product_template_id: The product for which to seek information, as a + `product.template` id. + :param recordset combination: The combination of the product, as a + `product.template.attribute.value` recordset. + :param int currency_id: The currency of the transaction, as a `res.currency` id. + :param str so_date: The date of the `sale.order`, to compute the price at the right rate. + :param int quantity: The quantity of the product. + :param int|None product_uom_id: The unit of measure of the product, as a `uom.uom` id. + :param int|None company_id: The company to use, as a `res.company` id. + :param int|None pricelist_id: The pricelist to use, as a `product.pricelist` id. + :rtype: dict + :return: Basic informations about a product, generated by + :meth:`_get_basic_product_information`. + """ + if company_id: + request.update_context(allowed_company_ids=[company_id]) + product_template = request.env['product.template'].browse(product_template_id) + pricelist = request.env['product.pricelist'].browse(pricelist_id) + product_uom = request.env['uom.uom'].browse(product_uom_id) + currency = request.env['res.currency'].browse(currency_id) + combination = request.env['product.template.attribute.value'].browse(combination) + product = product_template._get_variant_for_combination(combination) + + return self._get_basic_product_information( + product or product_template, + pricelist, + combination, + quantity=quantity or 0.0, + uom=product_uom, + currency=currency, + date=datetime.fromisoformat(so_date), + ) + + @route('/sale_product_configurator/get_optional_products', type='json', auth='user') + def sale_product_configurator_get_optional_products( + self, + product_template_id, + combination, + parent_combination, + currency_id, + so_date, + company_id=None, + pricelist_id=None, + ): + """ Return information about optional products for the given `product.template`. + + :param int product_template_id: The product for which to seek information, as a + `product.template` id. + :param recordset combination: The combination of the product, as a + `product.template.attribute.value` recordset. + :param recordset parent_combination: The combination of the parent product, as a + `product.template.attribute.value` recordset. + :param int currency_id: The currency of the transaction, as a `res.currency` id. + :param str so_date: The date of the `sale.order`, to compute the price at the right rate. + :param int|None company_id: The company to use, as a `res.company` id. + :param int|None pricelist_id: The pricelist to use, as a `product.pricelist` id. + :rtype: [dict] + :return: A list of optional products information, generated by + :meth:`_get_product_information`. + """ + if company_id: + request.update_context(allowed_company_ids=[company_id]) + product_template = request.env['product.template'].browse(product_template_id) + parent_combination = request.env['product.template.attribute.value'].browse( + parent_combination + combination + ) + return [ + dict( + **self._get_product_information( + optional_product_template, + optional_product_template._get_first_possible_combination( + parent_combination=parent_combination + ), + currency_id, + so_date, + parent_combination=parent_combination, + pricelist_id=pricelist_id, + ), + parent_product_tmpl_ids=[product_template.id], + ) for optional_product_template in product_template.optional_product_ids + ] + + def _get_product_information( + self, + product_template, + combination, + currency_id, + so_date, + quantity=1, + product_uom_id=None, + pricelist_id=None, + parent_combination=None, + ): + """ Return complete information about a product. + + :param recordset product_template: The product for which to seek information, as a + `product.template` record. + :param recordset combination: The combination of the product, as a + `product.template.attribute.value` recordset. + :param int currency_id: The currency of the transaction, as a `res.currency` id. + :param str so_date: The date of the `sale.order`, to compute the price at the right rate. + :param int quantity: The quantity of the product. + :param int|None product_uom_id: The unit of measure of the product, as a `uom.uom` id. + :param int|None pricelist_id: The pricelist to use, as a `product.pricelist` id. + :param recordset|None parent_combination: The combination of the parent product, as a + `product.template.attribute.value` recordset. + :rtype: dict + :return: A dict with the following structure: + { + 'product_tmpl_id': int, + 'id': int, + 'description_sale': str|False, + 'display_name': str, + 'price': float, + 'quantity': int + 'attribute_line': [{ + 'id': int + 'attribute': { + 'id': int + 'name': str + 'display_type': str + }, + 'attribute_value': [{ + 'id': int, + 'name': str, + 'price_extra': float, + 'html_color': str|False, + 'image': str|False, + 'is_custom': bool + }], + 'selected_attribute_id': int, + }], + 'exclusions': dict, + 'archived_combination': dict, + 'parent_exclusions': dict, + } + """ + pricelist = request.env['product.pricelist'].browse(pricelist_id) + product_uom = request.env['uom.uom'].browse(product_uom_id) + currency = request.env['res.currency'].browse(currency_id) + product = product_template._get_variant_for_combination(combination) + attribute_exclusions = product_template._get_attribute_exclusions( + parent_combination=parent_combination, + combination_ids=combination.ids, + ) + + return dict( + product_tmpl_id=product_template.id, + **self._get_basic_product_information( + product or product_template, + pricelist, + combination, + quantity=quantity, + uom=product_uom, + currency=currency, + date=datetime.fromisoformat(so_date), + ), + quantity=quantity, + attribute_lines=[dict( + id=ptal.id, + attribute=dict(**ptal.attribute_id.read(['id', 'name', 'display_type'])[0]), + attribute_values=[ + dict( + **ptav.read(['name', 'html_color', 'image', 'is_custom'])[0], + price_extra=ptav.currency_id._convert( + ptav.price_extra, + currency, + request.env.company, + datetime.fromisoformat(so_date).date(), + ), + ) for ptav in ptal.product_template_value_ids + if ptav.ptav_active or combination and ptav.id in combination.ids + ], + selected_attribute_value_ids=combination.filtered( + lambda c: ptal in c.attribute_line_id + ).ids, + create_variant=ptal.attribute_id.create_variant, + ) for ptal in product_template.attribute_line_ids], + exclusions=attribute_exclusions['exclusions'], + archived_combinations=attribute_exclusions['archived_combinations'], + parent_exclusions=attribute_exclusions['parent_exclusions'], + ) + + def _get_basic_product_information(self, product_or_template, pricelist, combination, **kwargs): + """ Return basic information about a product + + :param recordset product_or_template: The product for which to seek information, as a + `product.product` or `product.template` record. + :param recordset|None pricelist: The pricelist to use, as a `product.pricelist` record. + :param recordset combination: The combination of the product, as a + `product.template.attribute.value` recordset. + :param dict kwargs: Locally unused data passed to `_get_product_price` + :rtype: dict + :return: A dict with the following structure:: + { + 'id': int, # if product_or_template is a record of `product.product`. + 'description_sale': str|False, + 'display_name': str, + 'price': float, + 'quantity': int, + } + """ + basic_information = dict( + **product_or_template.read(['description_sale', 'display_name'])[0] + ) + # If the product is a template, check the combination to compute the name to take dynamic + # and no_variant attributes into account. Also, drop the id which was auto-included by the + # search but isn't relevant since it is supposed to be the id of a `product.product` record. + if not product_or_template.is_product_variant: + basic_information['id'] = False + combination_name = combination._get_combination_name() + if combination_name: + basic_information.update( + display_name=f"{basic_information['display_name']} ({combination_name})" + ) + return dict( + **basic_information, + price=pricelist._get_product_price( + product_or_template.with_context( + **product_or_template._get_product_price_context(combination) + ), + **kwargs, + ), + ) diff --git a/data/sale_demo.xml b/data/sale_demo.xml new file mode 100644 index 0000000..41247ef --- /dev/null +++ b/data/sale_demo.xml @@ -0,0 +1,25 @@ + + + + + Chair floor protection + + 12.0 + 0.01 + + + Office chairs can harm your floor: protect it. + + + + + + + + + + + + + + diff --git a/i18n/ar.po b/i18n/ar.po new file mode 100644 index 0000000..40d28dd --- /dev/null +++ b/i18n/ar.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Malaz Abuidris , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Malaz Abuidris , 2023\n" +"Language-Team: Arabic (https://app.transifex.com/odoo/teams/41243/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "إضافة" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "إضافة واحدة" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "أضف منتجات اختيارية " + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "قيم الخاصية" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "قم بتهيئة منتجك " + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "تأكيد" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "السعر" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "المنتج" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "الكمية" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "اقتراح عند 'الإضافة إلى عربة التسوق' أو عرض السعر " + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "إزالة واحد " + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "هذا الخيار أو تركيبة الخيارات هذه غير متاحة " + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "الإجمالي:" diff --git a/i18n/bg.po b/i18n/bg.po new file mode 100644 index 0000000..e70f83a --- /dev/null +++ b/i18n/bg.po @@ -0,0 +1,185 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Ивайло Малинов , 2023 +# Igor Sheludko , 2023 +# Rosen Vladimirov , 2023 +# Martin Trigaux, 2023 +# Maria Boyadjieva , 2023 +# Albena Mincheva , 2023 +# KeyVillage, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: KeyVillage, 2023\n" +"Language-Team: Bulgarian (https://app.transifex.com/odoo/teams/41243/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Добави" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Атрибутивни стойности" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Потвърждение" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Цена" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Продукт" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Количество" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Общо:" diff --git a/i18n/ca.po b/i18n/ca.po new file mode 100644 index 0000000..f2b4469 --- /dev/null +++ b/i18n/ca.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Marc Tormo i Bochaca , 2023 +# Carles Antoli , 2023 +# Óscar Fonseca , 2023 +# Sandra Franch , 2023 +# marcescu, 2023 +# Arnau Ros, 2023 +# Manel Fernandez Ramirez , 2023 +# Quim - eccit , 2023 +# Josep Anton Belchi, 2023 +# Albert Parera, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Albert Parera, 2023\n" +"Language-Team: Catalan (https://app.transifex.com/odoo/teams/41243/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Afegir" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Afegir-ne un" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valors de atribut" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 "Protecció del terra de la cadira" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "¿És el producte configurable?" + +#. 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 cadires d'oficina poden danyar el seu terra: protegeixi-ho." + +#. 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 "" +"Els productes opcionals se suggereixen cada vegada que el client prem *Add " +"to Cart* (estratègia de venda creuada, per exemple, per a ordinadors: " +"garantia, programari, etc.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Preu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Producte" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Imatge de Producte" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Variant de producte" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Quantitat" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Recomanar en Afegir \" a la cistella\" o al pressupost" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Eliminar un" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/cs.po b/i18n/cs.po new file mode 100644 index 0000000..6b877da --- /dev/null +++ b/i18n/cs.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Jakub Smolka, 2023 +# Ivana Bartonkova, 2023 +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Přidat" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Přidat jeden" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Hodnoty atributů" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdit" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Je produkt konfigurovatelný?" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Cena" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produktový obrázek" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Produktová varianta" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Množství" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Odebrat jeden" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Položka prodejní objednávky" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Celkem:" diff --git a/i18n/da.po b/i18n/da.po new file mode 100644 index 0000000..6769392 --- /dev/null +++ b/i18n/da.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Mads Søndergaard, 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Tilføj" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Tilføj en" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Tilføj valgfrie produkter" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Egenskabs værdier" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bekræft" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Kan produktet konfigureres?" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Pris" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produktbillede" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Antal" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Fjern én" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/de.po b/i18n/de.po new file mode 100644 index 0000000..af217ea --- /dev/null +++ b/i18n/de.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Michael Hofer, 2023 +# Larissa Manderfeld, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2023\n" +"Language-Team: German (https://app.transifex.com/odoo/teams/41243/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Hinzufügen" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Hinzufügen" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Optionale Produkte hinzufügen" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Attributwerte" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Cancel" +msgstr "Stornieren" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Ihr Produkt konfigurieren" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bestätigen" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Einen benutzerdefinierten Wert eingeben" + +#. 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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Preis" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produktbild" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Produktvariante" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Menge" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Empfohlen bei „In den Warenkorb“ oder Angebot" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Entfernen" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Produkt entfernen" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Verkaufsauftragszeile" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Diese Option oder Kombination von Optionen ist nicht verfügbar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Gesamt:" diff --git a/i18n/es.po b/i18n/es.po new file mode 100644 index 0000000..df33169 --- /dev/null +++ b/i18n/es.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Lucia Pacheco, 2023 +# Wil Odoo, 2023 +# Larissa Manderfeld, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2024\n" +"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Añadir" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Agregue uno" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Agregar productos opcionales" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valores de atributo" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Configurar su producto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Escribir un valor personalizado" + +#. 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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Precio" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Producto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Imagen del producto" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Variante de producto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Cantidad" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Recomendar al \"Añadir al carrito\" o al presupuesto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Quitar uno" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Eliminar producto" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Línea de orden de venta" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Esta opción o esta combinación de opciones no está disponible" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/es_419.po b/i18n/es_419.po new file mode 100644 index 0000000..5e746d7 --- /dev/null +++ b/i18n/es_419.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Lucia Pacheco, 2023 +# Iran Villalobos López, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Iran Villalobos López, 2023\n" +"Language-Team: Spanish (Latin America) (https://app.transifex.com/odoo/teams/41243/es_419/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_419\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Agregar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Agregar uno" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Agregar productos opcionales" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valores de atributo" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Configurar su producto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Escribir un valor personalizado" + +#. 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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Precio" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Producto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Imagen del 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Cantidad" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Recomendar al \"Añadir al carrito\" o a la cotización" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Eliminar uno" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Eliminar producto" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Esta opción o esta combinación de opciones no está disponible" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/et.po b/i18n/et.po new file mode 100644 index 0000000..9710ebe --- /dev/null +++ b/i18n/et.po @@ -0,0 +1,187 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Rivo Zängov , 2023 +# Algo Kärp , 2023 +# Piia Paurson , 2023 +# Martin Trigaux, 2023 +# Triine Aavik , 2023 +# Leaanika Randmets, 2023 +# Patrick-Jordan Kiudorv, 2023 +# Egon Raamat , 2023 +# Eneli Õigus , 2023 +# Anna, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Anna, 2023\n" +"Language-Team: Estonian (https://app.transifex.com/odoo/teams/41243/et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Lisa" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Lisage üks" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Lisa valikulised tooted" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Atribuudi väärtused" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 "Tooli põrandakaitse" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Seadista oma toode" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Kinnitage" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Sisesta kohandatud väärtus" + +#. 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:product.template,description_sale:sale_product_configurator.product_product_1_product_template +msgid "Office chairs can harm your floor: protect it." +msgstr "Kontoritoolid võivad teie põrandat kahjustada: kaitske seda." + +#. 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 "" +"Valikulisi tooteid soovitatakse alati, kui klient vajutab *Lisa ostukorvi* " +"(ristmüügistrateegia, nt arvutite jaoks: garantii, tarkvara jne)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Hind" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Toode" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Toote pilt" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Kogus" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Soovitage ostukorvi lisamisel või hinnapakkumisel" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Eemaldage üks" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Eemalda toode" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Antud võimalus või valikute kombinatsioon pole saadaval." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Kokku:" diff --git a/i18n/fa.po b/i18n/fa.po new file mode 100644 index 0000000..2c4bdce --- /dev/null +++ b/i18n/fa.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Mohsen Mohammadi , 2023 +# Hamed Mohammadi , 2023 +# Hamid Darabi, 2023 +# Hanna Kheradroosta, 2023 +# Mohammad Tahmasebi , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Persian (https://app.transifex.com/odoo/teams/41243/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "افزودن" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "افزودن یکی" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "مقادیر مشخصه" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "تایید کردن" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "قیمت" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "محصول" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "تعداد" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "هنگام «افزودن به سبد خرید» یا پیش فاکتور توصیه کنید" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "حذف یکی" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "مجموع:" diff --git a/i18n/fi.po b/i18n/fi.po new file mode 100644 index 0000000..a8ac3a0 --- /dev/null +++ b/i18n/fi.po @@ -0,0 +1,185 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Jarmo Kortetjärvi , 2023 +# Timo Koukkari , 2023 +# Ossi Mantylahti , 2023 +# Tuomo Aura , 2023 +# Kari Lindgren , 2023 +# Tuomas Lyyra , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Finnish (https://app.transifex.com/odoo/teams/41243/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Lisää" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Lisää yksi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Attribuuttien arvot" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Vahvista" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Onko tuote konfiguroitavissa?" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Hinta" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Tuote" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Tuotekuva" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Määrä" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Suositellaan 'Lisää ostoskoriin' tai tarjouksen yhteydessä" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Poista yksi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Summa:" diff --git a/i18n/fr.po b/i18n/fr.po new file mode 100644 index 0000000..ffdfeb9 --- /dev/null +++ b/i18n/fr.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Jolien De Paepe, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jolien De Paepe, 2023\n" +"Language-Team: French (https://app.transifex.com/odoo/teams/41243/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Ajouter" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Ajouter" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Ajouter des produits optionnels" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valeurs d'attribut" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Configurez votre produit" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmer" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Saisissez une valeur personnalisée" + +#. 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 "Ce produit est-il configurable ?" + +#. 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: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 "Produits 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 produits optionnels sont suggérés quand le client clique sur *Ajouter au" +" Panier* (stratégie de vente croisée, par ex. pour des ordinateurs : " +"garantie, software, etc.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Prix" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produit" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Image du produit" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Variante de produit" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Quantité" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "À recommander lors de l'ajout au panier ou d'un devis" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Supprimer" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Supprimer le produit" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Ligne de commande" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Cette option ou cette combinaison d'options n'est pas disponible" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total :" diff --git a/i18n/he.po b/i18n/he.po new file mode 100644 index 0000000..f4f360b --- /dev/null +++ b/i18n/he.po @@ -0,0 +1,183 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Martin Trigaux, 2023 +# שהאב חוסיין , 2023 +# Lilach Gilliam , 2023 +# Ofir Blum , 2023 +# ZVI BLONDER , 2023 +# Yihya Hugirat , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Yihya Hugirat , 2023\n" +"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: he\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "הוסף" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "הוסף אחד" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "ערכי תכונות" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "אשר" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "מחיר" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "מוצר" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "כמות" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "המלץ בעת 'הוספת לעגלת הקניות' או הצעת מחיר" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "הסר אחד" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "סה\"כ:" diff --git a/i18n/hr.po b/i18n/hr.po new file mode 100644 index 0000000..d94f5a2 --- /dev/null +++ b/i18n/hr.po @@ -0,0 +1,170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Karolina Tonković , 2022 +# Tina Milas, 2022 +# Martin Trigaux, 2022 +# Vladimir Vrgoč, 2022 +# Bole , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+0000\n" +"Last-Translator: Bole , 2022\n" +"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Dodaj jedan" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add to cart" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Vrijednosti značajki" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Available Options:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Back" +msgstr "Natrag" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure" +msgstr "Postavke" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdi" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Cijena" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Proizvod" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Slika 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Količina" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Ukloni jedan" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "custom" +msgstr "" diff --git a/i18n/hu.po b/i18n/hu.po new file mode 100644 index 0000000..1c2a2fd --- /dev/null +++ b/i18n/hu.po @@ -0,0 +1,185 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# krnkris, 2023 +# Szabolcs Rádi, 2023 +# Ákos Nagy , 2023 +# Gergő Kertész , 2023 +# Martin Trigaux, 2023 +# gezza , 2023 +# Tamás Németh , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tamás Németh , 2023\n" +"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Hozzáadás" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Hozzáadás" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Tulajdonság értékek" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Cancel" +msgstr "Töröl" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Megerősítés" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "A termék konfigurálható?" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Ár" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Termék" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Termék képe" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Mennyiség" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Ajánlás a „Kosárba helyezés” vagy ajánlatadáshoz" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Eltávolítás" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Vevői megrendelés sor" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Összesen:" diff --git a/i18n/id.po b/i18n/id.po new file mode 100644 index 0000000..4f61ca6 --- /dev/null +++ b/i18n/id.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Abe Manyo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Abe Manyo, 2023\n" +"Language-Team: Indonesian (https://app.transifex.com/odoo/teams/41243/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Tambahkan" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Tambahkan satu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Tambahkan produk-produk opsional" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Nilai-nilai Atribut" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 "Perlindungan lantai kursi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Konfigurasikan produk Anda" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Konfirmasi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Masukkan value yang dikustomisasi" + +#. 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 "Apakah produk dapat dikonfigurasi?" + +#. 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 "Kursi kantor dapat melukai lantai Anda: lindungi mereka." + +#. 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 "" +"Produk Opsional akan disarankan kapanpun pelanggan memencet *Tambahkan ke " +"Keranjang* (strategi cross-sell, contoh untuk komputer: garansi, software, " +"dsb.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Harga" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produk" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Gambar 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Kuantitas" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Sarankan saat 'Tambahkan ke Keranjang' atau quotation" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Hapus satu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Hapus produk" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Baris Pesanan Penjualan" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Opsi ini atau kombinasi opsi-opsi tidak tersedia" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/it.po b/i18n/it.po new file mode 100644 index 0000000..d563e67 --- /dev/null +++ b/i18n/it.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Marianna Ciofani, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Marianna Ciofani, 2023\n" +"Language-Team: Italian (https://app.transifex.com/odoo/teams/41243/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Aggiungi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Aggiungi unità" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Aggiungi prodotti opzionali" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valori attributo" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Configura il tuo prodotto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Conferma" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Inserisci un valore personalizzato" + +#. 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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Prezzo" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Prodotto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Immagine 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Quantità" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Raccomanda quando si aggiunge al carrello o si fa un'offerta" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Rimuovi unità" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Elimina prodotto" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Questa opzione o combinazione di opzioni non è disponibile" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Totale:" diff --git a/i18n/ja.po b/i18n/ja.po new file mode 100644 index 0000000..d341976 --- /dev/null +++ b/i18n/ja.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Junko Augias, 2023 +# Ryoko Tsuda , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Ryoko Tsuda , 2023\n" +"Language-Team: Japanese (https://app.transifex.com/odoo/teams/41243/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "追加" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "一つを追加" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "オプションプロダクトを追加" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "属性値" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "プロダクトを設定" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "確認" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "価格" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "プロダクト" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "数量" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "「カートに入れる」、又は見積の際に推奨" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "一つを削除" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "このオプションまたはオプションの組合わせを利用できません" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "合計:" diff --git a/i18n/ko.po b/i18n/ko.po new file mode 100644 index 0000000..02ce7a4 --- /dev/null +++ b/i18n/ko.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Daye Jeong, 2023 +# Sarah Park, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Sarah Park, 2023\n" +"Language-Team: Korean (https://app.transifex.com/odoo/teams/41243/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "추가" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "하나 추가하기" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "선택 품목 추가" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "속성 값" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "품목 구성" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "승인" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "가격" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "품목" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "수량" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "'장바구니에 담기' 또는 견적 시 추천됩니다" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "하나만 제거하기" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "해당 선택 항목이나 선택 조합은 사용할 수 없습니다." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "합계 :" diff --git a/i18n/lb.po b/i18n/lb.po new file mode 100644 index 0000000..30b270b --- /dev/null +++ b/i18n/lb.po @@ -0,0 +1,162 @@ +# 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: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2019-08-26 09:14+0000\n" +"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n" +"Language: lb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add to cart" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Available Options:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Back" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "custom" +msgstr "" diff --git a/i18n/lt.po b/i18n/lt.po new file mode 100644 index 0000000..19cf9b6 --- /dev/null +++ b/i18n/lt.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Linas Versada , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Pridėti" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Pridėti vieną" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Atributų reikšmės" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Patvirtinti" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Kaina" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produktas" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produkto paveikslėlis" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Kiekis" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Pašalinti vieną" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Viso:" diff --git a/i18n/lv.po b/i18n/lv.po new file mode 100644 index 0000000..fadb29a --- /dev/null +++ b/i18n/lv.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# ievaputnina , 2023 +# Will Sensors, 2023 +# Anzelika Adejanova, 2023 +# Arnis Putniņš , 2023 +# Armīns Jeltajevs , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Latvian (https://app.transifex.com/odoo/teams/41243/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Pievienot" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Atribūtu vērtības" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Cancel" +msgstr "Atcelt" + +#. module: sale_product_configurator +#: model:product.template,name:sale_product_configurator.product_product_1_product_template +msgid "Chair floor protection" +msgstr "Krēslu grīdas aizsardzība" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Apstiprināt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 "Papildus produkti" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Cena" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkts" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produkta attēls" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Produkta variants" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Daudzums" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Pārdošanas pasūtījuma rinda" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Summa:" diff --git a/i18n/mn.po b/i18n/mn.po new file mode 100644 index 0000000..59b0fa9 --- /dev/null +++ b/i18n/mn.po @@ -0,0 +1,169 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Minj P , 2022 +# Martin Trigaux, 2022 +# Baskhuu Lodoikhuu , 2022 +# Batmunkh Ganbat , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+0000\n" +"Last-Translator: Batmunkh Ganbat , 2022\n" +"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n" +"Language: mn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Нэгийг нэмэх" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add to cart" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Шинж чанарын утгууд" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Available Options:" +msgstr "Боломжит сонголтууд:" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Back" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure" +msgstr "Тохируулга" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Үнэ" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Бараа" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Тоо хэмжээ" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "custom" +msgstr "" diff --git a/i18n/nb.po b/i18n/nb.po new file mode 100644 index 0000000..9b3699a --- /dev/null +++ b/i18n/nb.po @@ -0,0 +1,169 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Fredrik Ahlsen , 2022 +# Jorunn D. Newth, 2022 +# Martin Trigaux, 2022 +# Marius Stedjan , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+0000\n" +"Last-Translator: Marius Stedjan , 2022\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Legg til én" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add to cart" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Attributtverdier" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Available Options:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Back" +msgstr "Tilbake" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure" +msgstr "Konfigurer" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bekreft" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +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 "Foreslåtte 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 "Foreslåtte produkter blir vist når kunden legger til produkter i handlevognen (cross-sell-strategi. F.eks kan det for datamaskiner være ekstra garantitid, programvare, osv.)" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Pris" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produktbilde" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Antall" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Fjern én" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "custom" +msgstr "" diff --git a/i18n/nl.po b/i18n/nl.po new file mode 100644 index 0000000..8d8a0ce --- /dev/null +++ b/i18n/nl.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Jolien De Paepe, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jolien De Paepe, 2023\n" +"Language-Team: Dutch (https://app.transifex.com/odoo/teams/41243/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Toevoegen" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Voeg één toe" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Voeg optionele producten toe" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Kenmerkwaardes" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Configureer je product" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bevestigen" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Geef een gepersonaliseerde waarde op" + +#. 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:product.template,description_sale:sale_product_configurator.product_product_1_product_template +msgid "Office chairs can harm your floor: protect it." +msgstr "Kantoorstoelen kunnen je vloer beschadigingen: bescherm je vloer." + +#. 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 " +"\"Toevoegen aan winkelmandje\" klikt (cross-selling strategie, bijv. " +"garantie, software, etc.)" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Prijs" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Product" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Productafbeelding" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Hoeveelheid" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Aanbevelen bij 'Toevoegen aan winkelmandje' of offerte" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Verwijder één" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Verwijder product" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Deze optie of combinatie van opties is niet beschikbaar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Totaal:" diff --git a/i18n/pl.po b/i18n/pl.po new file mode 100644 index 0000000..bb16610 --- /dev/null +++ b/i18n/pl.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Dodaj" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Dodaj jeden" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Wartość atrybutu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potwierdź" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Czy produkt jest konfigurowalny?" + +#. 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 "Krzesła biurowe mogą uszkodzić podłogę: chroń ją." + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Kwota" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Obraz 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Ilość" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Rekomendowane podczas dodawania do koszyka lub oferty" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Usuń jeden" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Suma:" diff --git a/i18n/pt.po b/i18n/pt.po new file mode 100644 index 0000000..d14be91 --- /dev/null +++ b/i18n/pt.po @@ -0,0 +1,176 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Adicionar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Adicionar um" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valores de Atributo" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Preço" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Imagem do 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Quantidade" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Remover um" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po new file mode 100644 index 0000000..a0a36cc --- /dev/null +++ b/i18n/pt_BR.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Maitê Dietze, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Maitê Dietze, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/odoo/teams/41243/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Adicionar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Adicionar um" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Adicionar produtos opcionais" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valores de atributo" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Configure seus produtos" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmar" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +msgstr "Insira um valor personalizado" + +#. 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: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: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 em *Adicionar ao" +" Carrinho* (estratégia de venda cruzada, por exemplo, para computadores: " +"garantia, software etc.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Preço" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Imagem do produto" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.sale_order_view_form +msgid "Product Variant" +msgstr "Variante do produto" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Quantidade" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Recomendar ao adicionar produto ao carrinho ou cotação" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Remover um" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "Remover produto" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linha do pedido de venda" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Esta opção ou combinação de opções não está disponível" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/ro.po b/i18n/ro.po new file mode 100644 index 0000000..954ffd9 --- /dev/null +++ b/i18n/ro.po @@ -0,0 +1,170 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Cozmin Candea , 2022 +# Martin Trigaux, 2022 +# Fekete Mihai , 2022 +# Hongu Cosmin , 2022 +# Dorin Hongu , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0beta\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:49+0000\n" +"PO-Revision-Date: 2022-09-22 05:55+0000\n" +"Last-Translator: Dorin Hongu , 2022\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Adaugă" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add to cart" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Valori atribute" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Available Options:" +msgstr "Opțiuni disponibile:" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Back" +msgstr "Înapoi" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure" +msgstr "Configurare" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Confirmă" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produs" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Imagine 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Eliminați unu" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "custom" +msgstr "" diff --git a/i18n/ru.po b/i18n/ru.po new file mode 100644 index 0000000..c7fa839 --- /dev/null +++ b/i18n/ru.po @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Ivan Kropotkin , 2023 +# Сергей Шебанин , 2023 +# Martin Trigaux, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Добавить" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Добавить один" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "Добавьте дополнительные продукты" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Значения атрибута" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "Настройте свой продукт" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Подтвердить" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Цена" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Товар" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Количество" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Рекомендуем при \"добавлении в корзину\" или предложении" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Удалить один" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "Эта опция или комбинация опций недоступна" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Итого:" diff --git a/i18n/sale_product_configurator.pot b/i18n/sale_product_configurator.pot new file mode 100644 index 0000000..758af38 --- /dev/null +++ b/i18n/sale_product_configurator.pot @@ -0,0 +1,172 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 21:55+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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "" diff --git a/i18n/sk.po b/i18n/sk.po new file mode 100644 index 0000000..912a6c1 --- /dev/null +++ b/i18n/sk.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Pridať" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Pridaj jeden" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Hodnoty atribútu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdiť" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Je produkt konfigurovateľný?" + +#. 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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Cena" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Obrázok 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Množstvo" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Odstráň jednu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Celkom:" diff --git a/i18n/sl.po b/i18n/sl.po new file mode 100644 index 0000000..32deae9 --- /dev/null +++ b/i18n/sl.po @@ -0,0 +1,184 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Jasmina Macur , 2023 +# Tadej Lupšina , 2023 +# Tomaž Jug , 2023 +# Martin Trigaux, 2023 +# matjaz k , 2023 +# Vida Potočnik , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Vida Potočnik , 2023\n" +"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Dodaj" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Dodajte ga" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Vrednosti lastnosti" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 "Zaščita tal za stole" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potrdi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Ali je izdelek nastavljiv?" + +#. 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 "Pisarniški stoli lahko poškodujejo tla: zaščitite jih." + +#. 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 izdelki" + +#. 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 "" +"Opcijski izdelki so predlagani vsakič, ko kupec pritisne *Dodaj v košarico* " +"(strategija navzkrižne prodaje, npr. za računalnike: garancija, programska " +"oprema itd.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Cena" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Izdelek" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Slika 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 izdelka" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Količina" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Priporoči pri 'dodajanju v košarico' ali ponudbi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Odstrani ga" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Postavka naročila" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Skupaj:" diff --git a/i18n/sr.po b/i18n/sr.po new file mode 100644 index 0000000..3276fdf --- /dev/null +++ b/i18n/sr.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Martin Trigaux, 2023 +# Dragan Vukosavljevic , 2023 +# Milan Bojovic , 2023 +# コフスタジオ, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: コフスタジオ, 2024\n" +"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Dodaj" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Dodaj jedan" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Vrednost atributa" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Cancel" +msgstr "Otkaži" + +#. module: sale_product_configurator +#: model:product.template,name:sale_product_configurator.product_product_1_product_template +msgid "Chair floor protection" +msgstr "Chair floor protection" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Potvrdi" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Da li se proizvod može konfigurisati?" + +#. 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 "Office chairs can harm your floor: protect it." + +#. 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 "Opcioni 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 "" +"Optional Products are suggested whenever the customer hits *Add to Cart* " +"(cross-sell strategy, e.g. for computers: warranty, software, etc.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Cena" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Proizvod" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Slika 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Količina" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Preporuči tokom 'Dodavanje u korpu' ili ponudu" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Ukloni jedan" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Linija porudžbenice" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Ukupno:" diff --git a/i18n/sv.po b/i18n/sv.po new file mode 100644 index 0000000..c4153ac --- /dev/null +++ b/i18n/sv.po @@ -0,0 +1,185 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Chrille Hedberg , 2023 +# Kristoffer Grundström , 2023 +# Kim Asplund , 2023 +# Simon S, 2023 +# Anders Wallenquist , 2023 +# Lasse L, 2023 +# Martin Trigaux, 2023 +# Haojun Zou , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Haojun Zou , 2023\n" +"Language-Team: Swedish (https://app.transifex.com/odoo/teams/41243/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Lägg till" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Lägg till en" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Attributvärden" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 "Golvskydd för stol" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Bekräfta" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Är produkten konfigurerbar?" + +#. 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 "Kontorsstolar kan skada ditt golv. Se till att skydda det!" + +#. 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 "Alternativa 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 "" +"Alternativa produkter föreslås när kunden klickar *Lägg i varukorgen* " +"(strategi för korsförsäljning, t.ex. garanti, mjukvara, etc)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Pris" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Produkt" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Produkt Bild" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Antal" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Ta bort en" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Total:" diff --git a/i18n/th.po b/i18n/th.po new file mode 100644 index 0000000..6be7cdf --- /dev/null +++ b/i18n/th.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Rasareeyar Lappiam, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Rasareeyar Lappiam, 2024\n" +"Language-Team: Thai (https://app.transifex.com/odoo/teams/41243/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "เพิ่ม" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "เพิ่มหนึ่งรายการ" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "เพิ่มผลิตภัณฑ์เสริม" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "ค่าคุณลักษณะ" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "กำหนดค่าผลิตภัณฑ์ของคุณ" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "ยืนยัน" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "ราคา" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "สินค้า" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "ปริมาณ" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "แนะนำเมื่อ 'เพิ่มในตะกร้า' หรือใบเสนอราคา" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "นำออกหนึ่งรายการ" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "ไม่มีตัวเลือกนี้หรือตัวเลือกรวมกัน" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "ทั้งหมด:" diff --git a/i18n/tr.po b/i18n/tr.po new file mode 100644 index 0000000..177b9b5 --- /dev/null +++ b/i18n/tr.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Ugur Yilmaz , 2023 +# Murat Durmuş , 2023 +# Tugay Hatıl , 2023 +# Güven YILMAZ , 2023 +# Ertuğrul Güreş , 2023 +# Ramiz Deniz Öner , 2023 +# Murat Kaplan , 2023 +# Ediz Duman , 2023 +# Martin Trigaux, 2023 +# abc Def , 2023 +# Levent Karakaş , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Levent Karakaş , 2023\n" +"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Ekle" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Ekle" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Nitelik Değerleri" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Cancel" +msgstr "İptal" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Onayla" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Ürün yapılandırılabilir mi?" + +#. 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: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, örn. Bilgisayarlar için: garanti, " +"yazılım, vb.)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Fiyat" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Ürün" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Ürün Görseli" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Miktar" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "'Sepete Eklerken' veya teklif verirken tavsiye edin" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Birini kaldır" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Toplam:" diff --git a/i18n/uk.po b/i18n/uk.po new file mode 100644 index 0000000..f16113d --- /dev/null +++ b/i18n/uk.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Додати" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Додати один" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Значення атрибутів" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Підтвердити" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Ціна" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Товар" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Кількість" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Рекомендувати під час \"Додавання в кошик\" або пропозиції" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Вилучити один" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Разом:" diff --git a/i18n/vi.po b/i18n/vi.po new file mode 100644 index 0000000..6547511 --- /dev/null +++ b/i18n/vi.po @@ -0,0 +1,179 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "Thêm" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "Thêm một " + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "Giá trị thuộc tính" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "Xác nhận" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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 "Sản phẩm có thể cấu hình được không?" + +#. 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ể làm hỏng sàn. Hãy bảo vệ sàn nhà." + +#. 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,...)." + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "Giá" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "Sản phẩm" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +msgstr "Hình ảnh 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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "Số lượng" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "Đề xuất khi 'Thêm vào giỏ hàng' hoặc báo giá" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "Xóa một" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +msgstr "" + +#. module: sale_product_configurator +#: model:ir.model,name:sale_product_configurator.model_sale_order_line +msgid "Sales Order Line" +msgstr "Dòng đơn bán hàng" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "Tổng:" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po new file mode 100644 index 0000000..72bfb3e --- /dev/null +++ b/i18n/zh_CN.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/odoo/teams/41243/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "添加" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "添加一行" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "添加可选产品" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "属性值" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "配置您的产品" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "确认" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "价格" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "产品" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "数量" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "在“添加到购物车”或报价时推荐" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "移除一行" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "此选项或选项组合不可用" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "总计:" diff --git a/i18n/zh_TW.po b/i18n/zh_TW.po new file mode 100644 index 0000000..cc6d991 --- /dev/null +++ b/i18n/zh_TW.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * sale_product_configurator +# +# Translators: +# Wil Odoo, 2023 +# Tony Ng, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:55+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tony Ng, 2024\n" +"Language-Team: Chinese (Taiwan) (https://app.transifex.com/odoo/teams/41243/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add" +msgstr "加入" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Add one" +msgstr "添加一行" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Add optional products" +msgstr "加入可選產品" + +#. module: sale_product_configurator +#: model:ir.model.fields,field_description:sale_product_configurator.field_sale_order_line__product_template_attribute_value_ids +msgid "Attribute Values" +msgstr "屬性值" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.js:0 +#, python-format +msgid "Configure your product" +msgstr "配置你的產品" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_configurator_dialog/product_configurator_dialog.xml:0 +#, python-format +msgid "Confirm" +msgstr "確認" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_template_attribute_line/product_template_attribute_line.xml:0 +#, python-format +msgid "Enter a customized value" +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: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: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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Price" +msgstr "價格" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#: model:ir.model,name:sale_product_configurator.model_product_template +#, python-format +msgid "Product" +msgstr "商品" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Product Image" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Quantity" +msgstr "數量" + +#. module: sale_product_configurator +#: model_terms:ir.ui.view,arch_db:sale_product_configurator.product_template_view_form +msgid "Recommend when 'Adding to Cart' or quotation" +msgstr "在“添加到購物車”或報價時推薦" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove one" +msgstr "刪除一行" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "Remove product" +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 +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product/product.xml:0 +#, python-format +msgid "This option or combination of options is not available" +msgstr "此選項或選項組合不可用" + +#. module: sale_product_configurator +#. odoo-javascript +#: code:addons/sale_product_configurator/static/src/js/product_list/product_list.xml:0 +#, python-format +msgid "Total:" +msgstr "總計:" diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..519b41d --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- + +from . import product_template +from . import sale_order_line diff --git a/models/product_template.py b/models/product_template.py new file mode 100644 index 0000000..9bb19f0 --- /dev/null +++ b/models/product_template.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class ProductTemplate(models.Model): + _inherit = 'product.template' + _check_company_auto = True + + optional_product_ids = fields.Many2many( + comodel_name='product.template', + relation='product_optional_rel', + column1='src_id', + column2='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.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.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 """ + res = super().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/models/sale_order_line.py b/models/sale_order_line.py new file mode 100644 index 0000000..933c296 --- /dev/null +++ b/models/sale_order_line.py @@ -0,0 +1,16 @@ +# -*- 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( + string="Is the product configurable?", + related='product_template_id.has_configurable_attributes', + depends=['product_id']) + product_template_attribute_value_ids = fields.Many2many( + related='product_id.product_template_attribute_value_ids', + depends=['product_id']) diff --git a/static/src/js/badge_extra_price/badge_extra_price.js b/static/src/js/badge_extra_price/badge_extra_price.js new file mode 100644 index 0000000..e4e05f5 --- /dev/null +++ b/static/src/js/badge_extra_price/badge_extra_price.js @@ -0,0 +1,21 @@ +/** @odoo-module **/ + +import { Component } from "@odoo/owl"; +import { formatCurrency } from "@web/core/currency"; + +export class BadgeExtraPrice extends Component { + static template = "product.badge_extra_price"; + static props = { + price: Number, + currencyId: Number, + }; + + /** + * Return the price, in the format of the given currency. + * + * @return {String} - The price, in the format of the given currency. + */ + getFormattedPrice() { + return formatCurrency( Math.abs(this.props.price), this.props.currencyId); + } +} diff --git a/static/src/js/badge_extra_price/badge_extra_price.xml b/static/src/js/badge_extra_price/badge_extra_price.xml new file mode 100644 index 0000000..4b708b4 --- /dev/null +++ b/static/src/js/badge_extra_price/badge_extra_price.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/src/js/product/product.js b/static/src/js/product/product.js new file mode 100644 index 0000000..1c1e89c --- /dev/null +++ b/static/src/js/product/product.js @@ -0,0 +1,67 @@ +/** @odoo-module */ + +import { Component } from "@odoo/owl"; +import { formatCurrency } from "@web/core/currency"; +import { + ProductTemplateAttributeLine as PTAL +} from "../product_template_attribute_line/product_template_attribute_line"; + +export class Product extends Component { + static components = { PTAL }; + static template = "sale_product_configurator.product"; + static props = { + id: { type: [Number, {value: false}], optional: true }, + product_tmpl_id: Number, + display_name: String, + description_sale: [Boolean, String], // backend sends 'false' when there is no description + price: Number, + quantity: Number, + attribute_lines: Object, + optional: Boolean, + imageURL: { type: String, optional: true }, + archived_combinations: Array, + exclusions: Object, + parent_exclusions: Object, + parent_product_tmpl_ids: { type: Array, element: Number, optional: true }, + }; + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Increase the quantity of the product in the state. + */ + increaseQuantity() { + this.env.setQuantity(this.props.product_tmpl_id, this.props.quantity+1); + } + + /** + * Set the quantity of the product in the state. + * + * @param {Event} event + */ + setQuantity(event) { + this.env.setQuantity(this.props.product_tmpl_id, parseFloat(event.target.value)); + } + + /** + * Decrease the quantity of the product in the state. + */ + decreaseQuantity() { + this.env.setQuantity(this.props.product_tmpl_id, this.props.quantity-1); + } + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Return the price, in the format of the given currency. + * + * @return {String} - The price, in the format of the given currency. + */ + getFormattedPrice() { + return formatCurrency(this.props.price, this.env.currencyId); + } +} diff --git a/static/src/js/product/product.scss b/static/src/js/product/product.scss new file mode 100644 index 0000000..6e2ca2b --- /dev/null +++ b/static/src/js/product/product.scss @@ -0,0 +1,36 @@ +.table.o_sale_product_configurator_table { + & tr:first-child > td { + padding-top: 0 !important; + } + + &.o_sale_product_configurator_table_optional > :not(caption) > *:last-child > * { + border-bottom: 0; + } +} + +.o_sale_product_configurator_img { + width: 120px; + max-height: 240px; +} + +.o_sale_product_configurator_qty { + width: 160px; + + input { + max-width: 4rem; + //removing input field=number arrows as their size might + //change depending on browser default styling and shift input's position + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + -webkit-appearance: none; + margin: 0; + } + &[type=number] { + -moz-appearance: textfield; + } + } +} + +.o_sale_product_configurator_price { + width: 160px; +} diff --git a/static/src/js/product/product.xml b/static/src/js/product/product.xml new file mode 100644 index 0000000..61d72fa --- /dev/null +++ b/static/src/js/product/product.xml @@ -0,0 +1,78 @@ + + + + + Product Image + Product Image + + +
+
+
+
+ This option or combination of options is not available +
+
+ + + + + +
+ + + +
+
+
+
+ + Remove product + + + +
+
+
+
+ +
+ + + diff --git a/static/src/js/product_configurator_dialog/product_configurator_dialog.js b/static/src/js/product_configurator_dialog/product_configurator_dialog.js new file mode 100644 index 0000000..2bd3b05 --- /dev/null +++ b/static/src/js/product_configurator_dialog/product_configurator_dialog.js @@ -0,0 +1,436 @@ +/** @odoo-module **/ + +import { _t } from "@web/core/l10n/translation"; +import { Component, onWillStart, useState, useSubEnv } from "@odoo/owl"; +import { Dialog } from '@web/core/dialog/dialog'; +import { ProductList } from "../product_list/product_list"; +import { useService } from "@web/core/utils/hooks"; + +export class ProductConfiguratorDialog extends Component { + static components = { Dialog, ProductList}; + static template = 'sale_product_configurator.dialog'; + static props = { + productTemplateId: Number, + ptavIds: { type: Array, element: Number }, + customAttributeValues: { + type: Array, + element: Object, + shape: { + ptavId: Number, + value: String, + } + }, + quantity: Number, + productUOMId: { type: Number, optional: true }, + companyId: { type: Number, optional: true }, + pricelistId: { type: Number, optional: true }, + currencyId: Number, + soDate: String, + edit: { type: Boolean, optional: true }, + save: Function, + discard: Function, + close: Function, // This is the close from the env of the Dialog Component + }; + static defaultProps = { + edit: false, + } + + setup() { + this.title = _t("Configure your product"); + this.rpc = useService("rpc"); + this.state = useState({ + products: [], + optionalProducts: [], + }); + + useSubEnv({ + mainProductTmplId: this.props.productTemplateId, + currencyId: this.props.currencyId, + addProduct: this._addProduct.bind(this), + removeProduct: this._removeProduct.bind(this), + setQuantity: this._setQuantity.bind(this), + updateProductTemplateSelectedPTAV: this._updateProductTemplateSelectedPTAV.bind(this), + updatePTAVCustomValue: this._updatePTAVCustomValue.bind(this), + isPossibleCombination: this._isPossibleCombination, + }); + + onWillStart(async () => { + const { products, optional_products } = await this._loadData(this.props.edit); + this.state.products = products; + this.state.optionalProducts = optional_products; + for (const customValue of this.props.customAttributeValues) { + this._updatePTAVCustomValue( + this.env.mainProductTmplId, + customValue.ptavId, + customValue.value + ); + } + this._checkExclusions(this.state.products[0]); + }); + } + + //-------------------------------------------------------------------------- + // Data Exchanges + //-------------------------------------------------------------------------- + + async _loadData(onlyMainProduct) { + return this.rpc('/sale_product_configurator/get_values', { + product_template_id: this.props.productTemplateId, + quantity: this.props.quantity, + currency_id: this.props.currencyId, + so_date: this.props.soDate, + product_uom_id: this.props.productUOMId, + company_id: this.props.companyId, + pricelist_id: this.props.pricelistId, + ptav_ids: this.props.ptavIds, + only_main_product: onlyMainProduct, + }); + } + + async _createProduct(product) { + return this.rpc('/sale_product_configurator/create_product', { + product_template_id: product.product_tmpl_id, + combination: this._getCombination(product), + }); + } + + async _updateCombination(product, quantity) { + return this.rpc('/sale_product_configurator/update_combination', { + product_template_id: product.product_tmpl_id, + combination: this._getCombination(product), + currency_id: this.props.currencyId, + so_date: this.props.soDate, + quantity: quantity, + product_uom_id: this.props.productUOMId, + company_id: this.props.companyId, + pricelist_id: this.props.pricelistId, + }); + } + + async _getOptionalProducts(product) { + return this.rpc('/sale_product_configurator/get_optional_products', { + product_template_id: product.product_tmpl_id, + combination: this._getCombination(product), + parent_combination: this._getParentsCombination(product), + currency_id: this.props.currencyId, + so_date: this.props.soDate, + company_id: this.props.companyId, + pricelist_id: this.props.pricelistId, + }); + } + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Add the product to the list of products and fetch his optional products. + * + * @param {Number} productTmplId - The product template id, as a `product.template` id. + */ + async _addProduct(productTmplId) { + const index = this.state.optionalProducts.findIndex( + p => p.product_tmpl_id === productTmplId + ); + if (index >= 0) { + this.state.products.push(...this.state.optionalProducts.splice(index, 1)); + // Fetch optional product from the server with the parent combination. + const product = this._findProduct(productTmplId); + let newOptionalProducts = await this._getOptionalProducts(product); + for(const newOptionalProductDict of newOptionalProducts) { + // If the optional product is already in the list, add the id of the parent product + // template in his list of `parent_product_tmpl_ids` instead of adding a second time + // the product. + const newProduct = this._findProduct(newOptionalProductDict.product_tmpl_id); + if (newProduct) { + newOptionalProducts = newOptionalProducts.filter( + (p) => p.product_tmpl_id != newOptionalProductDict.product_tmpl_id + ); + newProduct.parent_product_tmpl_ids.push(productTmplId); + } + } + if (newOptionalProducts) this.state.optionalProducts.push(...newOptionalProducts); + } + } + + /** + * Remove the product and his optional products from the list of products. + * + * @param {Number} productTmplId - The product template id, as a `product.template` id. + */ + _removeProduct(productTmplId) { + const index = this.state.products.findIndex(p => p.product_tmpl_id === productTmplId); + if (index >= 0) { + this.state.optionalProducts.push(...this.state.products.splice(index, 1)); + for (const childProduct of this._getChildProducts(productTmplId)) { + // Optional products might have multiple parents so we don't want to remove them if + // any of their parents are still on the list of products. + childProduct.parent_product_tmpl_ids = childProduct.parent_product_tmpl_ids.filter( + id => id !== productTmplId + ); + if (!childProduct.parent_product_tmpl_ids.length) { + this._removeProduct(childProduct.product_tmpl_id); + this.state.optionalProducts.splice( + this.state.optionalProducts.findIndex( + p => p.product_tmpl_id === childProduct.product_tmpl_id + ), 1 + ); + } + } + } + } + + /** + * Set the quantity of the product to a given value. + * + * If the value is less than or equal to zero, the product is removed from the product list + * instead, unless it is the main product, in which case the changes are ignored. + * + * @param {Number} productTmplId - The product template id, as a `product.template` id. + * @param {Number} quantity - The new quantity of the product. + */ + async _setQuantity(productTmplId, quantity) { + if (quantity <= 0) { + if (productTmplId === this.env.mainProductTmplId) { + const product = this._findProduct(productTmplId); + const { price } = await this._updateCombination(product, 1); + product.quantity = 1; + product.price = parseFloat(price); + return; + }; + this._removeProduct(productTmplId); + } else { + const product = this._findProduct(productTmplId); + const { price } = await this._updateCombination(product, quantity); + product.quantity = quantity; + product.price = parseFloat(price); + } + } + + /** + * Change the value of `selected_attribute_value_ids` on the given PTAL in the product. + * + * @param {Number} productTmplId - The product template id, as a `product.template` id. + * @param {Number} ptalId - The PTAL id, as a `product.template.attribute.line` id. + * @param {Number} ptavId - The PTAV id, as a `product.template.attribute.value` id. + * @param {Boolean} multiIdsAllowed - Whether multiple `product.template.attribute.value` can be selected. + */ + async _updateProductTemplateSelectedPTAV(productTmplId, ptalId, ptavId, multiIdsAllowed) { + const product = this._findProduct(productTmplId); + let selectedIds = product.attribute_lines.find(ptal => ptal.id === ptalId).selected_attribute_value_ids; + if (multiIdsAllowed) { + const ptavID = parseInt(ptavId); + if (!selectedIds.includes(ptavID)){ + selectedIds.push(ptavID); + } else { + selectedIds = selectedIds.filter(ptav => ptav !== ptavID); + } + + } else { + selectedIds = [parseInt(ptavId)]; + } + product.attribute_lines.find(ptal => ptal.id === ptalId).selected_attribute_value_ids = selectedIds; + this._checkExclusions(product); + if (this._isPossibleCombination(product)) { + const updatedValues = await this._updateCombination(product, product.quantity); + Object.assign(product, updatedValues); + // When a combination should exist but was deleted from the database, it should not be + // selectable and considered as an exclusion. + if (!product.id && product.attribute_lines.every(ptal => ptal.create_variant === "always")) { + const combination = this._getCombination(product); + product.archived_combinations = product.archived_combinations.concat([combination]); + this._checkExclusions(product); + } + } + } + + /** + * Set the custom value for a given custom PTAV. + * + * @param {Number} productTmplId - The product template id, as a `product.template` id. + * @param {Number} ptavId - The PTAV id, as a `product.template.attribute.value` id. + * @param {String} customValue - The custom value. + */ + _updatePTAVCustomValue(productTmplId, ptavId, customValue) { + const product = this._findProduct(productTmplId); + product.attribute_lines.find( + ptal => ptal.selected_attribute_value_ids.includes(ptavId) + ).customValue = customValue; + } + + /** + * Check the exclusions of a given product and his child. + * + * @param {Object} product - The product for which to check the exclusions. + * @param {undefined|Array} checked - The array of products checked for exclusions, used to + * avoid infinite check exclusions for recursive optional products. + */ + _checkExclusions(product, checked=undefined) { + const combination = this._getCombination(product); + const exclusions = product.exclusions; + const parentExclusions = product.parent_exclusions; + const archivedCombinations = product.archived_combinations; + const parentCombination = this._getParentsCombination(product); + const childProducts = this._getChildProducts(product.product_tmpl_id) + const ptavList = product.attribute_lines.flat().flatMap(ptal => ptal.attribute_values) + ptavList.map(ptav => ptav.excluded = false); // Reset all the values + + if (exclusions) { + for(const ptavId of combination) { + for(const excludedPtavId of exclusions[ptavId]) { + ptavList.find(ptav => ptav.id === excludedPtavId).excluded = true; + } + } + } + if (parentCombination) { + for(const ptavId of parentCombination) { + for(const excludedPtavId of (parentExclusions[ptavId]||[])) { + ptavList.find(ptav => ptav.id === excludedPtavId).excluded = true; + } + } + } + if (archivedCombinations) { + for(const excludedCombination of archivedCombinations) { + const ptavCommon = excludedCombination.filter((ptav) => combination.includes(ptav)); + if (ptavCommon.length === combination.length) { + for(const excludedPtavId of ptavCommon) { + ptavList.find(ptav => ptav.id === excludedPtavId).excluded = true; + } + } else if (ptavCommon.length === (combination.length - 1)) { + // In this case we only need to disable the remaining ptav + const disabledPtavId = excludedCombination.find( + (ptav) => !combination.includes(ptav) + ); + const excludedPtav = ptavList.find(ptav => ptav.id === disabledPtavId) + if (excludedPtav) { + excludedPtav.excluded = true; + } + } + } + } + const checkedProducts = checked || []; + for(const optionalProductTmpl of childProducts) { + // if the product is not checked for exclusions + if (!checkedProducts.includes(optionalProductTmpl)) { + checkedProducts.push(optionalProductTmpl); // remember that this product is checked + this._checkExclusions(optionalProductTmpl, checkedProducts); + } + } + } + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Return the product given his template id. + * + * @param {Number} productTmplId - The product template id, as a `product.template` id. + * @return {Object} - The product. + */ + _findProduct(productTmplId) { + // The product might be in either of the two lists `products` or `optional_products`. + return this.state.products.find(p => p.product_tmpl_id === productTmplId) || + this.state.optionalProducts.find(p => p.product_tmpl_id === productTmplId); + } + + /** + * Return the list of dependents products for a given product. + * + * @param {Number} productTmplId - The product template id for which to find his children, as a + * `product.template` id. + * @return {Array} - The list of dependents products. + */ + _getChildProducts(productTmplId) { + return [ + ...this.state.products.filter(p => p.parent_product_tmpl_ids?.includes(productTmplId)), + ...this.state.optionalProducts.filter(p => p.parent_product_tmpl_ids?.includes(productTmplId)) + ] + } + + /** + * Return the selected PTAV of the product, as a list of `product.template.attribute.value` id. + * + * @param {Object} product - The product for which to find the combination. + * @return {Array} - The combination of the product. + */ + _getCombination(product) { + return product.attribute_lines.flatMap(ptal => ptal.selected_attribute_value_ids); + } + + /** + * Return the selected PTAV of all the product parents, as a list of + * `product.template.attribute.value` id. + * + * @param {Object} product - The product for which to find the combination. + * @return {Array} - The combination of the product. + */ + _getParentsCombination(product) { + let parentsCombination = []; + for(const parentProductTmplId of product.parent_product_tmpl_ids || []) { + parentsCombination.push(this._getCombination(this._findProduct(parentProductTmplId))); + } + return parentsCombination.flat(); + } + + /** + * Check if a product has a valid combination. + * + * @param {Object} product - The product for which to check the combination. + * @return {Boolean} - Whether the combination is valid or not. + */ + _isPossibleCombination(product) { + return product.attribute_lines.every(ptal => !ptal.attribute_values.find( + ptav => ptal.selected_attribute_value_ids.includes(ptav.id) + )?.excluded); + } + + /** + * Check if all the products selected have a valid combination. + * + * @return {Boolean} - Whether all the products selected have a valid combination or not. + */ + isPossibleConfiguration() { + return [...this.state.products].every( + p => this._isPossibleCombination(p) + ); + } + + /** + * Confirm the current combination(s). + * + * @return {undefined} + */ + async onConfirm() { + if (!this.isPossibleConfiguration()) return; + // Create the products with dynamic attributes + for (const product of this.state.products) { + if ( + !product.id && + product.attribute_lines.some(ptal => ptal.create_variant === "dynamic") + ) { + const productId = await this._createProduct(product); + product.id = parseInt(productId); + } + } + await this.props.save( + this.state.products.find( + p => p.product_tmpl_id === this.env.mainProductTmplId + ), + this.state.products.filter( + p => p.product_tmpl_id !== this.env.mainProductTmplId + ), + ); + this.props.close(); + } + + /** + * Discard the modal. + */ + onDiscard() { + if (!this.props.edit) { + this.props.discard(); // clear the line + } + this.props.close(); + } +} diff --git a/static/src/js/product_configurator_dialog/product_configurator_dialog.xml b/static/src/js/product_configurator_dialog/product_configurator_dialog.xml new file mode 100644 index 0000000..1da2d54 --- /dev/null +++ b/static/src/js/product_configurator_dialog/product_configurator_dialog.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + diff --git a/static/src/js/product_list/product_list.js b/static/src/js/product_list/product_list.js new file mode 100644 index 0000000..443584e --- /dev/null +++ b/static/src/js/product_list/product_list.js @@ -0,0 +1,31 @@ +/** @odoo-module */ + +import { Component } from "@odoo/owl"; +import { formatCurrency } from "@web/core/currency"; +import { Product } from "../product/product"; + +export class ProductList extends Component { + static components = { Product }; + static template = "saleProductConfigurator.productList"; + static props = { + products: Array, + areProductsOptional: { type: Boolean, optional: true }, + }; + static defaultProps = { + areProductsOptional: false, + }; + + /** + * Return the total of the product in the list, in the currency of the `sale.order`. + * + * @return {String} - The sum of all items in the list, in the currency of the `sale.order`. + */ + getFormattedTotal() { + return formatCurrency( + this.props.products.reduce( + (totalPrice, product) => totalPrice + product.price * product.quantity, 0 + ), + this.env.currencyId, + ) + } +} diff --git a/static/src/js/product_list/product_list.xml b/static/src/js/product_list/product_list.xml new file mode 100644 index 0000000..ac7ac48 --- /dev/null +++ b/static/src/js/product_list/product_list.xml @@ -0,0 +1,25 @@ + + + +

Add optional products

+ + + + + + + + + + + + + + + + +
ProductQuantityPrice
+

Total:

+
+
+
diff --git a/static/src/js/product_template_attribute_line/product_template_attribute_line.js b/static/src/js/product_template_attribute_line/product_template_attribute_line.js new file mode 100644 index 0000000..d3e1bf9 --- /dev/null +++ b/static/src/js/product_template_attribute_line/product_template_attribute_line.js @@ -0,0 +1,147 @@ +/** @odoo-module */ + +import { Component } from "@odoo/owl"; +import { formatCurrency } from "@web/core/currency"; +import { BadgeExtraPrice } from "../badge_extra_price/badge_extra_price"; + +export class ProductTemplateAttributeLine extends Component { + static components = { BadgeExtraPrice }; + static template = "saleProductConfigurator.ptal"; + static props = { + productTmplId: Number, + id: Number, + attribute: { + type: Object, + shape: { + id: Number, + name: String, + display_type: { + type: String, + validate: type => ["color", "multi", "pills", "radio", "select"].includes(type), + }, + }, + }, + attribute_values: { + type: Array, + element: { + type: Object, + shape: { + id: Number, + name: String, + html_color: [Boolean, String], // backend sends 'false' when there is no color + image: [Boolean, String], // backend sends 'false' when there is no image set + is_custom: Boolean, + price_extra: Number, + excluded: { type: Boolean, optional: true }, + }, + }, + }, + selected_attribute_value_ids: { type: Array, element: Number }, + create_variant: { + type: String, + validate: type => ["always", "dynamic", "no_variant"].includes(type), + }, + customValue: {type: [{value: false}, String], optional: true}, + }; + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Update the selected PTAV in the state. + * + * @param {Event} event + */ + updateSelectedPTAV(event) { + this.env.updateProductTemplateSelectedPTAV( + this.props.productTmplId, this.props.id, event.target.value, this.props.attribute.display_type == 'multi' + ); + } + + /** + * Update in the state the custom value of the selected PTAV. + * + * @param {Event} event + */ + updateCustomValue(event) { + this.env.updatePTAVCustomValue( + this.props.productTmplId, this.props.selected_attribute_value_ids[0], event.target.value + ); + } + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Return template name to use by checking the display type in the props. + * + * Each attribute line can have one of this five display types: + * - 'Color' : Display each attribute as a circle filled with said color. + * - 'Pills' : Display each attribute as a rectangle-shaped element. + * - 'Radio' : Display each attribute as a radio element. + * - 'Select' : Display each attribute in a selection tag. + * - 'Multi' : Display each attribute in a multi-checkbox tag. + * + * @return {String} - The template name to use. + */ + getPTAVTemplate() { + switch(this.props.attribute.display_type) { + case 'color': + return 'saleProductConfigurator.ptav-color'; + case 'multi': + return 'saleProductConfigurator.ptav-multi'; + case 'pills': + return 'saleProductConfigurator.ptav-pills'; + case 'radio': + return 'saleProductConfigurator.ptav-radio'; + case 'select': + return 'saleProductConfigurator.ptav-select'; + } + } + + /** + * Return the name of the PTAV + * + * In the selection HTML tag, it is impossible to show the component `BadgeExtraPrice`. Append + * the extra price to the name to ensure that the extra price will be shown. + * Note: used in `saleProductConfigurator.ptav-select`. + * + * @param {Object} ptav - The attribute, as a `product.template.attribute.value` summary dict. + * @return {String} - The name of the PTAV. + */ + getPTAVSelectName(ptav) { + if (ptav.price_extra) { + const sign = ptav.price_extra > 0 ? '+' : '-'; + const price = formatCurrency( + Math.abs(ptav.price_extra), this.env.currencyId + ); + return ptav.name +" ("+ sign + " " + price + ")"; + } else { + return ptav.name; + } + } + + /** + * Check if the selected ptav is custom or not. + * + * @return {Boolean} - Whether the selected ptav is custom or not. + */ + isSelectedPTAVCustom() { + return this.props.attribute_values.find( + ptav => this.props.selected_attribute_value_ids.includes(ptav.id) + )?.is_custom; + } + + /** + * Check if the line has a custom ptav or not. + * + * @return {Boolean} - Whether the line has a custom ptav or not. + */ + hasPTAVCustom() { + return this.props.attribute_values.some( + ptav => ptav.is_custom + ); + } + } diff --git a/static/src/js/product_template_attribute_line/product_template_attribute_line.scss b/static/src/js/product_template_attribute_line/product_template_attribute_line.scss new file mode 100644 index 0000000..8097ccc --- /dev/null +++ b/static/src/js/product_template_attribute_line/product_template_attribute_line.scss @@ -0,0 +1,65 @@ +.o_sale_product_configurator_ptav_color { + border: 5px solid $border-color; + transition: $input-transition; + + @include o-field-pointer(); + + &:before { + content: ""; + display: block; + @include o-position-absolute(-3px, -3px, -3px, -3px); + border: 4px solid $o-view-background-color; + border-radius: 50%; + box-shadow: inset 0 0 3px rgba(black, 0.3); + } + + input { + margin: 8px; + height: 13px; + width: 13px; + opacity: 0; + } + + &.active { + border: 5px solid map-get($theme-colors, 'primary'); + } + + &.custom_value { + background-image: linear-gradient(to bottom right, #FF0000, #FFF200, #1E9600); + } + + &.transparent { + background-image: url(/web/static/img/transparent.png); + } + + &.css_not_available { + opacity: 1; + + &:after { + content: ""; + @include o-position-absolute(-5px, -5px, -5px, -5px); + border: 2px solid map-get($theme-colors, 'danger'); + border-radius: 50%; + background: str-replace(url("data:image/svg+xml;utf8,"), "#", "%23") ; + background-position: center; + background-repeat: no-repeat; + } + } +} + +.o_sale_product_configurator_ptav_pills.active label { + $-btn-secondary-design: map-get($o-btns-bs-override, "secondary"); + + background-color: map-get($-btn-secondary-design, active-background); + border-color: map-get($-btn-secondary-design, active-border); + color: map-get($-btn-secondary-design, active-color); +} + +.css_not_available { + opacity: 0.6; +} + +option.css_not_available { + opacity: 1; + color: #ccc; +} diff --git a/static/src/js/product_template_attribute_line/product_template_attribute_line.xml b/static/src/js/product_template_attribute_line/product_template_attribute_line.xml new file mode 100644 index 0000000..f055af3 --- /dev/null +++ b/static/src/js/product_template_attribute_line/product_template_attribute_line.xml @@ -0,0 +1,147 @@ + + + + +
+ +
+
+ +
+
+ + + + + +
    +
  • +
    + + +
    +
  • +
+
+ +
    +
  • + + +
  • +
+
+ +
    +
  • + + + +
  • +
+
+ +
    +
  • +
    + + +
    +
  • +
+
+
diff --git a/static/src/js/sale_product_field.js b/static/src/js/sale_product_field.js new file mode 100644 index 0000000..e9f6321 --- /dev/null +++ b/static/src/js/sale_product_field.js @@ -0,0 +1,159 @@ +/** @odoo-module */ + +import { SaleOrderLineProductField } from '@sale/js/sale_product_field'; +import { serializeDateTime } from "@web/core/l10n/dates"; +import { x2ManyCommands } from "@web/core/orm_service"; +import { useService } from "@web/core/utils/hooks"; +import { patch } from "@web/core/utils/patch"; +import { ProductConfiguratorDialog } from "./product_configurator_dialog/product_configurator_dialog"; + +async function applyProduct(record, product) { + // handle custom values & no variants + const contextRecords = []; + for (const ptal of product.attribute_lines) { + const selectedCustomPTAV = ptal.attribute_values.find( + ptav => ptav.is_custom && ptal.selected_attribute_value_ids.includes(ptav.id) + ); + if (selectedCustomPTAV) { + contextRecords.push({ + default_custom_product_template_attribute_value_id: selectedCustomPTAV.id, + default_custom_value: ptal.customValue, + }); + }; + } + + const proms = []; + proms.push(record.data.product_custom_attribute_value_ids.createAndReplace(contextRecords)); + + const noVariantPTAVIds = product.attribute_lines.filter( + ptal => ptal.create_variant === "no_variant" && ptal.attribute_values.length > 1 + ).flatMap(ptal => ptal.selected_attribute_value_ids); + + await Promise.all(proms); + await record.update({ + product_id: [product.id, product.display_name], + product_uom_qty: product.quantity, + product_no_variant_attribute_value_ids: [x2ManyCommands.set(noVariantPTAVIds)], + }); +}; + +patch(SaleOrderLineProductField.prototype, { + + setup() { + super.setup(...arguments); + + this.dialog = useService("dialog"); + this.orm = useService("orm"); + }, + + async _onProductTemplateUpdate() { + super._onProductTemplateUpdate(...arguments); + const result = await this.orm.call( + 'product.template', + 'get_single_product_variant', + [this.props.record.data.product_template_id[0]], + { + context: this.context, + } + ); + if(result && result.product_id) { + if (this.props.record.data.product_id != result.product_id.id) { + if (result.has_optional_products) { + this._openProductConfigurator(); + } else { + await this.props.record.update({ + product_id: [result.product_id, result.product_name], + }); + this._onProductUpdate(); + } + } + } else { + if (!result.mode || result.mode === 'configurator') { + this._openProductConfigurator(); + } else { + // only triggered when sale_product_matrix is installed. + this._openGridConfigurator(); + } + } + }, + + _editProductConfiguration() { + super._editProductConfiguration(...arguments); + if (this.props.record.data.is_configurable_product) { + this._openProductConfigurator(true); + } + }, + + get isConfigurableTemplate() { + return super.isConfigurableTemplate || this.props.record.data.is_configurable_product; + }, + + async _openProductConfigurator(edit=false) { + const saleOrderRecord = this.props.record.model.root; + let ptavIds = this.props.record.data.product_template_attribute_value_ids.records.map( + record => record.resId + ); + let customAttributeValues = []; + + if (edit) { + /** + * no_variant and custom attribute don't need to be given to the configurator for new + * products. + */ + ptavIds = ptavIds.concat(this.props.record.data.product_no_variant_attribute_value_ids.records.map( + record => record.resId + )); + /** + * `product_custom_attribute_value_ids` records are not loaded in the view bc sub templates + * are not loaded in list views. Therefore, we fetch them from the server if the record is + * saved. Else we use the value stored on the line. + */ + customAttributeValues = + this.props.record.data.product_custom_attribute_value_ids.records[0]?.isNew ? + this.props.record.data.product_custom_attribute_value_ids.records.map( + record => record.data + ) : + await this.orm.read( + 'product.attribute.custom.value', + this.props.record.data.product_custom_attribute_value_ids.currentIds, + ["custom_product_template_attribute_value_id", "custom_value"] + ) + } + + this.dialog.add(ProductConfiguratorDialog, { + productTemplateId: this.props.record.data.product_template_id[0], + ptavIds: ptavIds, + customAttributeValues: customAttributeValues.map( + data => { + return { + ptavId: data.custom_product_template_attribute_value_id[0], + value: data.custom_value, + } + } + ), + quantity: this.props.record.data.product_uom_qty, + productUOMId: this.props.record.data.product_uom[0], + companyId: saleOrderRecord.data.company_id[0], + pricelistId: saleOrderRecord.data.pricelist_id[0], + currencyId: this.props.record.data.currency_id[0], + soDate: serializeDateTime(saleOrderRecord.data.date_order), + edit: edit, + save: async (mainProduct, optionalProducts) => { + await applyProduct(this.props.record, mainProduct); + + this._onProductUpdate(); + saleOrderRecord.data.order_line.leaveEditMode(); + for (const optionalProduct of optionalProducts) { + const line = await saleOrderRecord.data.order_line.addNewRecord({ + position: 'bottom', + mode: "readonly", + }); + await applyProduct(line, optionalProduct); + } + }, + discard: () => { + saleOrderRecord.data.order_line.delete(this.props.record); + }, + }); + }, +}); diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..fcb5b9f --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +from . import test_product_configurator_data diff --git a/tests/common.py b/tests/common.py new file mode 100644 index 0000000..e2ef4f1 --- /dev/null +++ b/tests/common.py @@ -0,0 +1,129 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. +import base64 + +from odoo.tests.common import TransactionCase +from odoo.tools.misc import file_open + +class TestProductConfiguratorCommon(TransactionCase): + + @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', + 'display_type': 'color', + 'sequence': 20, + }) + product_attribute_value_3 = cls.env['product.attribute.value'].create({ + 'name': 'White', + 'attribute_id': product_attribute_2.id, + 'html_color': '#FFFFFF', + 'sequence': 1, + }) + product_attribute_value_4 = cls.env['product.attribute.value'].create({ + 'name': 'Black', + 'attribute_id': product_attribute_2.id, + 'html_color': '#000000', + '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 = 'product/static/img/product_product_11-image.png' + img_content = base64.b64encode(file_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 (TEST)', + 'list_price': 12.0, + }) + cls.product_product_conf_chair.optional_product_ids = [(4, cls.product_product_conf_chair_floor_protect.id)] + + cls.custom_pricelist = cls.env['product.pricelist'].create({ + 'name': 'Custom pricelist (TEST)', + 'sequence': 4, + 'item_ids': [(0, 0, { + 'base': 'list_price', + 'applied_on': '1_product', + 'product_tmpl_id': cls.product_product_custo_desk.id, + 'price_discount': 20, + 'min_quantity': 2, + 'compute_price': 'formula' + })] + }) + + @classmethod + 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/tests/test_product_configurator_data.py b/tests/test_product_configurator_data.py new file mode 100644 index 0000000..2b84b29 --- /dev/null +++ b/tests/test_product_configurator_data.py @@ -0,0 +1,418 @@ +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo.fields import Command +from odoo.tests import tagged +from odoo.addons.base.tests.common import HttpCaseWithUserDemo +from odoo.addons.product.tests.common import ProductAttributesCommon, ProductVariantsCommon +from odoo.addons.sale.tests.common import SaleCommon + + +@tagged('post_install', '-at_install') +class TestProductConfiguratorData(HttpCaseWithUserDemo, ProductVariantsCommon, SaleCommon): + + def request_get_values(self, product_template, ptav_ids=None): + base_url = product_template.get_base_url() + response = self.opener.post( + url=base_url + '/sale_product_configurator/get_values', + json={ + 'params': { + 'product_template_id': product_template.id, + 'quantity': 1.0, + 'currency_id': 1, + 'so_date': str(self.env.cr.now()), + 'product_uom_id': None, + 'company_id': None, + 'pricelist_id': None, + 'ptav_ids': ptav_ids, + 'only_main_product': False, + }, + } + ) + return response.json()['result'] + + def create_product_template_with_2_attributes(self): + return self.env['product.template'].create({ + 'name': 'Shirt', + 'categ_id': self.product_category.id, + 'attribute_line_ids': [ + Command.create({ + 'attribute_id': self.size_attribute.id, + 'value_ids': [ + Command.set([ + self.size_attribute_l.id, + self.size_attribute_m.id, + ]), + ], + }), + Command.create({ + 'attribute_id': self.color_attribute.id, + 'value_ids': [ + Command.set([ + self.color_attribute_red.id, + self.color_attribute_blue.id, + ]) + ], + }), + ], + }) + + def create_product_template_with_attribute_no_variant(self): + return self.env['product.template'].create({ + 'name': 'Chair', + 'categ_id': self.product_category.id, + 'attribute_line_ids': [ + Command.create({ + 'attribute_id': self.no_variant_attribute.id, + 'value_ids': [ + Command.set([ + self.no_variant_attribute_extra.id + ]), + ], + }), + Command.create({ + 'attribute_id': self.color_attribute.id, + 'value_ids': [ + Command.set([ + self.color_attribute_red.id, + self.color_attribute_blue.id, + ]) + ], + }), + ], + }) + + def create_product_template_with_2_attribute_no_variant(self): + return self.env['product.template'].create({ + 'name': 'Chair', + 'categ_id': self.product_category.id, + 'attribute_line_ids': [ + Command.create({ + 'attribute_id': self.no_variant_attribute.id, + 'value_ids': [ + Command.set([ + self.no_variant_attribute_extra.id, + self.no_variant_attribute_second.id, + ]), + ], + }), + Command.create({ + 'attribute_id': self.color_attribute.id, + 'value_ids': [ + Command.set([ + self.color_attribute_red.id, + self.color_attribute_blue.id, + ]) + ], + }), + ], + }) + + def test_dropped_value_isnt_shown(self): + self.assertEqual(len(self.product_template_sofa.product_variant_ids), 3) + + # Use variants s.t. they are archived and not deleted when value is removed + self.empty_order.order_line = [ + Command.create({ + 'product_id': product.id + }) + for product in self.product_template_sofa.product_variant_ids + ] + self.empty_order.action_confirm() + + # Remove attribute value + self.product_template_sofa.attribute_line_ids.value_ids -= self.color_attribute_red + self.assertEqual(len(self.product_template_sofa.product_variant_ids.filtered('active')), 2) + + self.authenticate('demo', 'demo') + result = self.request_get_values(self.product_template_sofa) + + # Make sure the inactive ptav was removed from the loaded attributes + self.assertEqual(len(result['products'][0]['attribute_lines'][0]['attribute_values']), 2) + + def test_dropped_attribute(self): + product_template = self.create_product_template_with_2_attributes() + self.assertEqual(len(product_template.product_variant_ids), 4) + + # Use variants s.t. they are archived and not deleted when value is removed + self.empty_order.order_line = [ + Command.create({ + 'product_id': product.id + }) + for product in product_template.product_variant_ids + ] + self.empty_order.action_confirm() + + # Remove attribute + product_template.attribute_line_ids[0].unlink() + self.assertEqual(len(product_template.product_variant_ids), 2) + + self.authenticate('demo', 'demo') + result = self.request_get_values(product_template) + + # Make sure archived combinations with inactive ptav are not loaded as it's useless to + # exclude combinations that are not even available + self.assertFalse(result['products'][0]['archived_combinations']) + + def test_dropped_attribute_value(self): + product_template = self.create_product_template_with_2_attributes() + self.assertEqual(len(product_template.product_variant_ids), 4) + + # Use variants s.t. they are archived and not deleted when value is removed + self.empty_order.order_line = [ + Command.create( + { + 'product_id': product.id + } + ) + for product in product_template.product_variant_ids + ] + self.empty_order.action_confirm() + + # Remove attribute value red + product_template.attribute_line_ids.filtered( + lambda ptal: ptal.attribute_id == self.color_attribute + ).value_ids = [Command.unlink(self.color_attribute_red.id)] + self.assertEqual(len(product_template.product_variant_ids), 2) + archived_variants = product_template.with_context( + active_test=False + ).product_variant_ids - product_template.product_variant_ids + self.assertEqual(len(archived_variants), 2) + + archived_ptav = product_template.attribute_line_ids.product_template_value_ids.filtered( + lambda ptav: ptav.product_attribute_value_id == self.color_attribute_red + ) + # Choose the variant (red, L) + variant_ptav_ids = [ + archived_ptav.id, + product_template.attribute_line_ids.product_template_value_ids.filtered( + lambda ptav: ptav.product_attribute_value_id == self.size_attribute_l + ).id, + ] + self.authenticate('demo', 'demo') + result = self.request_get_values(product_template, variant_ptav_ids) + archived_ptav = archived_variants.product_template_attribute_value_ids.filtered( + lambda ptav: ptav.product_attribute_value_id == self.color_attribute_red + ) + + # When requested combination contains inactive ptav + # check that archived combinations are loaded + self.assertEqual( + len(result['products'][0]['archived_combinations']), + 2 + ) + for combination in result['products'][0]['archived_combinations']: + self.assertIn(archived_ptav.id, combination) + + # When requested combination contains inactive ptav check that exclusions contains it + self.assertIn(str(archived_ptav.id), result['products'][0]['exclusions']) + + def test_excluded_inactive_ptav(self): + product_template = self.create_product_template_with_2_attributes() + self.assertEqual(len(product_template.product_variant_ids), 4) + + ptav_with_exclusion = product_template.attribute_line_ids[0].product_template_value_ids[0] + ptav_excluded = product_template.attribute_line_ids[1].product_template_value_ids[0] + + # Add an exclusion + ptav_with_exclusion.write({ + 'exclude_for': [ + Command.create({ + 'product_tmpl_id': product_template.id, + 'value_ids': [ + Command.set([ + ptav_excluded.id, + ]), + ], + }), + ], + }) + self.assertEqual(len(product_template.product_variant_ids), 3) + + self.authenticate('demo', 'demo') + result = self.request_get_values(product_template) + # The PTAVs should be mutually excluded + self.assertEqual(result['products'][0]['exclusions'] + [str(ptav_with_exclusion.id)], [ptav_excluded.id]) + self.assertEqual(result['products'][0]['exclusions'] + [str(ptav_excluded.id)], [ptav_with_exclusion.id]) + + ptav_with_exclusion.write({'ptav_active': False}) + result = self.request_get_values(product_template) + # The inactive PTAV should not be in the product exclusions dict + self.assertFalse(str(ptav_with_exclusion.id) in result['products'][0]['exclusions']) + # The inactive PTAV should not be in the exclusions of the excluded PTAV + self.assertEqual(result['products'][0]['exclusions'][str(ptav_excluded.id)], []) + + ptav_with_exclusion.write({'ptav_active': True}) + ptav_excluded.write({'ptav_active': False}) + result = self.request_get_values(product_template) + # The excluded inactive PTAV should not be in the exclusions of the first PTAV + self.assertEqual(result['products'][0]['exclusions'][str(ptav_with_exclusion.id)], []) + # The excluded inactive PTAV should not be in the product exclusions dict + self.assertFalse(str(ptav_excluded.id) in result['products'][0]['exclusions']) + + ptav_with_exclusion.write({'ptav_active': False}) + ptav_excluded.write({'ptav_active': False}) + result = self.request_get_values(product_template) + + # The inactive PTAVs should not be in the product exclusions dict + self.assertFalse(str(ptav_with_exclusion.id) in result['products'][0]['exclusions']) + self.assertFalse(str(ptav_excluded.id) in result['products'][0]['exclusions']) + + def test_ptal_values_set_for_no_variant_atribute(self): + ''' + Test that selected_attribute_value_id is set for attribute with only one variant and + `create_variant`: `no_variant`. + ''' + product_template = self.create_product_template_with_attribute_no_variant() + + self.authenticate('demo', 'demo') + + ptav_red = product_template.attribute_line_ids.product_template_value_ids.filtered( + lambda ptav: ptav.product_attribute_value_id == self.color_attribute_red + ) + result = self.request_get_values(product_template, [ptav_red.id]) + self.assertTrue(result['products'][0]['attribute_lines'][1]['selected_attribute_value_ids']) + + def test_dropped_attribute_value_custom_no_variant(self): + product_template = self.create_product_template_with_2_attribute_no_variant() + + # Use variants s.t. they are archived and not deleted when value is removed + + self.empty_order.order_line = [ + Command.create({ + 'product_id': product.id, + 'product_no_variant_attribute_value_ids': product.attribute_line_ids.product_template_value_ids.filtered( + lambda p: p.attribute_id.create_variant == 'no_variant' + ), + }) + for product in product_template.product_variant_ids] + self.empty_order.action_confirm() + + # Remove attribute value extra + product_template.attribute_line_ids.filtered( + lambda ptal: ptal.attribute_id == self.no_variant_attribute + ).value_ids = [Command.unlink(self.no_variant_attribute_extra.id)] + + archived_ptav = product_template.attribute_line_ids.product_template_value_ids.filtered( + lambda ptav: ptav.product_attribute_value_id == self.no_variant_attribute_extra + ) + self.assertFalse(archived_ptav.ptav_active) + self.assertEqual( + product_template.attribute_line_ids.filtered( + lambda ptal: ptal.attribute_id == self.no_variant_attribute + ).product_template_value_ids[0], + archived_ptav, + ) + # Choose the variant (red) + variant_ptav_ids = [ + product_template.attribute_line_ids.product_template_value_ids.filtered( + lambda ptav: ptav.product_attribute_value_id == self.color_attribute_red + ).id, + ] + self.authenticate('demo', 'demo') + result = self.request_get_values(product_template, variant_ptav_ids) + selected_values = [ + selected_value + for product in result['products'][0]['attribute_lines'] + for selected_value in product['selected_attribute_value_ids']] + + # Make sure that deleted value is not selected + self.assertNotIn(archived_ptav.id, selected_values) + + +@tagged('post_install', '-at_install') +class TestSaleProductVariants(ProductAttributesCommon, SaleCommon): + + @classmethod + def setUpClass(cls): + super().setUpClass() + + cls.product_template_2lines_2attributes = cls.env['product.template'].create({ + 'name': '2 lines 2 attributes', + 'uom_id': cls.uom_unit.id, + 'uom_po_id': cls.uom_unit.id, + 'categ_id': cls.product_category.id, + 'attribute_line_ids': [ + Command.create({ + 'attribute_id': cls.color_attribute.id, + 'value_ids': [Command.set([ + cls.color_attribute_red.id, + cls.color_attribute_blue.id, + ])], + }), + Command.create({ + 'attribute_id': cls.size_attribute.id, + 'value_ids': [Command.set([ + cls.size_attribute_s.id, + cls.size_attribute_m.id, + ])] + }) + ] + }) + + # Sell all variants + cls.empty_order.order_line = [ + Command.create({ + 'product_id': product.id, + }) + for product in cls.product_template_2lines_2attributes.product_variant_ids + ] + + def test_attribute_removal(self): + def _get_ptavs(): + return self.product_template_2lines_2attributes.with_context( + active_test=False + ).attribute_line_ids.product_template_value_ids + + def _get_archived_variants(): + return self.product_template_2lines_2attributes.with_context( + active_test=False + ).product_variant_ids.filtered(lambda p: not p.active) + + def _get_active_variants(): + return self.product_template_2lines_2attributes.product_variant_ids + + self.assertEqual(len(_get_ptavs()), 4) + self.product_template_2lines_2attributes.attribute_line_ids = [ + Command.unlink(self.product_template_2lines_2attributes.attribute_line_ids.filtered( + lambda ptal: ptal.attribute_id.id == self.size_attribute.id + ).id) + ] + self.assertEqual(len(_get_ptavs()), 4) + + # Use products s.t. they are archived and not deleted + self.empty_order.order_line = [ + Command.create({ + 'product_id': product.id, + }) + for product in self.product_template_2lines_2attributes.product_variant_ids + ] + + self.assertEqual(len(_get_archived_variants()), 4) + self.assertEqual(len(_get_active_variants()), 2) + + self.product_template_2lines_2attributes.attribute_line_ids = [ + Command.create({ + 'attribute_id': self.size_attribute.id, + 'value_ids': [Command.set([ + self.size_attribute_s.id, + ])] + }) + ] + self.assertEqual(len(_get_ptavs()), 4) + self.assertEqual(len(_get_active_variants()), 2) + self.assertEqual(len(_get_archived_variants()), 4) + + # When adding a single attribute line, the attribute will be added to all existing variants + # Instead of unarchiving existing archived variants with the same combination + # Leading to a state where the database holds two variants with the same combination + # We don't want this combination to be excluded from the product configurator as it is valid + # as long as there is one active variant with this configuration. + exclusions_data = self.product_template_2lines_2attributes._get_attribute_exclusions() + self.assertTrue( + all( + tuple(product.product_template_attribute_value_ids.ids) not in exclusions_data['archived_combinations'] + for product in _get_active_variants() + ) + ) diff --git a/views/product_template_views.xml b/views/product_template_views.xml new file mode 100644 index 0000000..32d407e --- /dev/null +++ b/views/product_template_views.xml @@ -0,0 +1,22 @@ + + + + + product.template.form.inherit.sale.product.configurator + product.template + + + + 0 + + + + + + + + diff --git a/views/sale_order_views.xml b/views/sale_order_views.xml new file mode 100644 index 0000000..6ee1c97 --- /dev/null +++ b/views/sale_order_views.xml @@ -0,0 +1,30 @@ + + + + + sale.order.form.inherit.sale.product.configurator + sale.order + + + + 0 + + + + + + + + + + + + + + hide + Product Variant + + + + +