summaryrefslogtreecommitdiff
path: root/addons/web
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-09-20 17:33:22 +0200
committerChristophe Simonis <chs@odoo.com>2019-09-20 17:34:45 +0200
commit64e43808b79badb5869a8d73cc1cc3f3b3aa8e12 (patch)
tree9a22d5f6c03073a4d10faedea8df23a5211e8b8f /addons/web
parent944891ced081cda3b8b3db5faf3b7ac23b6b4ce8 (diff)
parent58a83d12228fbbd4e9dde542e133d264204ee0f3 (diff)
[MERGE] forward port branch saas-12.5 up to 58a83d12228
Diffstat (limited to 'addons/web')
-rw-r--r--addons/web/controllers/__init__.py2
-rw-r--r--addons/web/controllers/list_controller.py98
-rw-r--r--addons/web/controllers/main.py9
-rw-r--r--addons/web/i18n/ar.po32
-rw-r--r--addons/web/i18n/cs.po1013
-rw-r--r--addons/web/i18n/de.po32
-rw-r--r--addons/web/i18n/es.po129
-rw-r--r--addons/web/i18n/fr.po40
-rw-r--r--addons/web/i18n/hr.po32
-rw-r--r--addons/web/i18n/hu.po32
-rw-r--r--addons/web/i18n/it.po31
-rw-r--r--addons/web/i18n/lb.po4529
-rw-r--r--addons/web/i18n/lt.po28
-rw-r--r--addons/web/i18n/mn.po34
-rw-r--r--addons/web/i18n/nb.po32
-rw-r--r--addons/web/i18n/nl.po47
-rw-r--r--addons/web/i18n/pl.po31
-rw-r--r--addons/web/i18n/pt_BR.po32
-rw-r--r--addons/web/i18n/ru.po32
-rw-r--r--addons/web/i18n/tr.po32
-rw-r--r--addons/web/i18n/uk.po32
-rw-r--r--addons/web/i18n/vi.po32
-rw-r--r--addons/web/i18n/zh_CN.po32
-rw-r--r--addons/web/i18n/zh_TW.po32
-rw-r--r--addons/web/static/src/js/chrome/action_manager_act_window.js2
-rw-r--r--addons/web/static/src/js/chrome/user_menu.js2
-rw-r--r--addons/web/static/src/js/core/dom.js7
-rw-r--r--addons/web/static/src/js/fields/basic_fields.js106
-rw-r--r--addons/web/static/src/js/fields/relational_fields.js102
-rw-r--r--addons/web/static/src/js/views/abstract_controller.js3
-rw-r--r--addons/web/static/src/js/views/abstract_view.js18
-rw-r--r--addons/web/static/src/js/views/basic/basic_model.js6
-rw-r--r--addons/web/static/src/js/views/calendar/calendar_view.js2
-rw-r--r--addons/web/static/src/js/views/control_panel/control_panel_renderer.js1
-rw-r--r--addons/web/static/src/js/views/control_panel/mobile_control_panel_renderer.js31
-rw-r--r--addons/web/static/src/js/views/control_panel/search/search_bar.js20
-rw-r--r--addons/web/static/src/js/views/control_panel/search/search_facet.js20
-rw-r--r--addons/web/static/src/js/views/graph/graph_controller.js2
-rw-r--r--addons/web/static/src/js/views/graph/graph_renderer.js29
-rw-r--r--addons/web/static/src/js/views/list/list_controller.js173
-rw-r--r--addons/web/static/src/js/views/list/list_editable_renderer.js69
-rw-r--r--addons/web/static/src/js/views/list/list_model.js10
-rw-r--r--addons/web/static/src/js/views/list/list_renderer.js21
-rw-r--r--addons/web/static/src/js/views/pivot/pivot_controller.js18
-rw-r--r--addons/web/static/src/js/views/pivot/pivot_renderer.js5
-rw-r--r--addons/web/static/src/js/views/pivot/pivot_view.js1
-rw-r--r--addons/web/static/src/js/views/search_panel.js17
-rw-r--r--addons/web/static/src/js/views/view_dialogs.js5
-rw-r--r--addons/web/static/src/js/widgets/auto_complete.js14
-rw-r--r--addons/web/static/src/js/widgets/date_picker.js2
-rw-r--r--addons/web/static/src/scss/banner.scss3
-rw-r--r--addons/web/static/src/scss/control_panel.scss28
-rw-r--r--addons/web/static/src/scss/fields.scss1
-rw-r--r--addons/web/static/src/scss/kanban_view.scss1
-rw-r--r--addons/web/static/src/scss/list_view.scss4
-rw-r--r--addons/web/static/src/scss/modal.scss5
-rw-r--r--addons/web/static/src/scss/search_view_mobile.scss4
-rw-r--r--addons/web/static/src/scss/ui.scss38
-rw-r--r--addons/web/static/src/xml/base.xml85
-rw-r--r--addons/web/static/tests/chrome/action_manager_tests.js2
-rw-r--r--addons/web/static/tests/fields/basic_fields_tests.js537
-rw-r--r--addons/web/static/tests/fields/relational_fields/field_many2many_tests.js41
-rw-r--r--addons/web/static/tests/fields/relational_fields/field_many2one_tests.js75
-rw-r--r--addons/web/static/tests/fields/relational_fields_tests.js2
-rw-r--r--addons/web/static/tests/helpers/mock_server.js10
-rw-r--r--addons/web/static/tests/views/graph_tests.js2
-rw-r--r--addons/web/static/tests/views/list_tests.js656
-rw-r--r--addons/web/static/tests/views/mobile_control_panel_tests.js68
-rw-r--r--addons/web/static/tests/views/search_panel_tests.js106
-rw-r--r--addons/web/static/tests/widgets/domain_selector_tests.js1
-rw-r--r--addons/web/tests/__init__.py1
-rw-r--r--addons/web/tests/test_image.py13
-rw-r--r--addons/web/tests/test_list_controller.py75
73 files changed, 7961 insertions, 858 deletions
diff --git a/addons/web/controllers/__init__.py b/addons/web/controllers/__init__.py
index 48cc37266c6..2113dfa39c9 100644
--- a/addons/web/controllers/__init__.py
+++ b/addons/web/controllers/__init__.py
@@ -1,4 +1,4 @@
# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
-from . import main, pivot
+from . import main, pivot, list_controller
diff --git a/addons/web/controllers/list_controller.py b/addons/web/controllers/list_controller.py
new file mode 100644
index 00000000000..7ac98b79220
--- /dev/null
+++ b/addons/web/controllers/list_controller.py
@@ -0,0 +1,98 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import json
+from datetime import datetime
+
+from odoo import http
+from odoo.http import request
+from odoo.tools.misc import xlwt
+
+
+HEADER_BOLD = xlwt.easyxf("font: bold on; pattern: pattern solid, fore_colour gray25;")
+
+class TableListExporter(http.Controller):
+
+ def _write_group_header(self, worksheet, x, y, group, columns, group_depth=0):
+ aggregates = group.get('aggregateValues', {})
+ title = group.get('value')
+
+ if group.get('hideHeader'):
+ return x, y
+
+ title = '%s%s (%s)' % ('>' * group_depth, title, group.get('count', 0))
+ worksheet.write(x, y, title, HEADER_BOLD)
+ for column in columns[1:]: # No aggregates allowed in the first column
+ y += 1
+ worksheet.write(x, y, aggregates.get(column['field'], ''), HEADER_BOLD)
+ return x + 1, 0
+
+ def _write_record(self, worksheet, x, y, record, columns):
+ for column in columns:
+ worksheet.write(x, y, record[column['field']])
+ y += 1
+ return x + 1, 0
+
+ def _write_groups(self, worksheet, x, y, groups, columns, group_depth=0):
+ """
+ Write groups to the xls worksheet. Recursive if groups are nested (chained groupby)
+ :param worksheet:
+ :param x: start position where to write the group (vertical axis, pointing downward)
+ :param y: start position where to write the group (horizontal axis, pointing to the right)
+ :param groups: list of groups. Each group is a dict containing either records' data
+ or sub-groups. A group has the following structure:
+ 'data': list of records or list of sub-groups
+ 'isGrouped': True if data contains sub-groups
+ 'value': title of the group
+ 'count': number of records in the group
+ 'aggregateValues': dict container aggregated values of fields {field: aggregatedValue, ...}
+ 'hideHeader': self explanatory, used when the records are not grouped at all.
+ :param columns: list of displayed columns. Each column is a dict with the following keys:
+ 'field': field name
+ 'aggregateValue': aggregate for all records
+ 'string':
+ """
+ for group in groups:
+ x, y = self._write_group_header(worksheet, x, y, group, columns, group_depth)
+ if group['isGrouped']:
+ # Recursively write sub-groups
+ x, y = self._write_groups(worksheet, x, y, group['data'], columns, group_depth + 1)
+ else:
+ for record in group['data']:
+ x, y = self._write_record(worksheet, x, y, record, columns)
+ return x, y
+
+ def _write_worksheet(self, worksheet, data):
+ bold = xlwt.easyxf("font: bold on;")
+
+ columns = data['columns']
+ groups = data['groups']
+
+ # Write main header
+ for y, field in enumerate(columns):
+ worksheet.write(0, y, field['string'], bold)
+
+ # Write data
+ x, y = 1, 0
+ x, y = self._write_groups(worksheet, x, y, groups, columns)
+
+ # Write column aggregates
+ for y, field in enumerate(columns):
+ worksheet.write(x, y, field.get('aggregateValue', ''), bold)
+
+ @http.route('/web/list/export_xls', type='http', auth="user")
+ def export_xls(self, data, token):
+ data = json.loads(data)
+ title = data.get('title', 'export')
+ workbook = xlwt.Workbook()
+ worksheet = workbook.add_sheet(title)
+
+ self._write_worksheet(worksheet, data)
+
+ response = request.make_response(None,
+ headers=[('Content-Type', 'application/vnd.ms-excel'),
+ ('Content-Disposition', 'attachment; filename="%s - %s.xls"' % (title, datetime.now()))],
+ cookies={'fileToken': token})
+ workbook.save(response.stream)
+
+ return response
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index b2132850d08..cb8d4d82ecc 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -1190,7 +1190,7 @@ class Binary(http.Controller):
'/web/partner_image/<int:rec_id>',
'/web/partner_image/<int:rec_id>/<string:field>',
'/web/partner_image/<int:rec_id>/<string:field>/<string:model>/'], type='http', auth="public")
- def content_image_partner(self, rec_id, field='image_64', model='res.partner', **kwargs):
+ def content_image_partner(self, rec_id, field='image_128', model='res.partner', **kwargs):
# other kwargs are ignored on purpose
return self._content_image(id=rec_id, model='res.partner', field=field,
placeholder='user_placeholder.jpg')
@@ -1833,8 +1833,11 @@ class ReportController(http.Controller):
response = self.report_routes(reportname, docids=docids, converter=converter, context=context)
else:
# Particular report:
- data = url_decode(url.split('?')[1]).items() # decoding the args represented in JSON
- response = self.report_routes(reportname, converter=converter, context=context, **dict(data))
+ data = dict(url_decode(url.split('?')[1]).items()) # decoding the args represented in JSON
+ if 'context' in data:
+ context, data_context = json.loads(context or '{}'), json.loads(data.pop('context'))
+ context = json.dumps({**context, **data_context})
+ response = self.report_routes(reportname, converter=converter, context=context, **data)
report = request.env['ir.actions.report']._get_report_from_name(reportname)
filename = "%s.%s" % (report.name, extension)
diff --git a/addons/web/i18n/ar.po b/addons/web/i18n/ar.po
index b287087c5cb..8d35cede596 100644
--- a/addons/web/i18n/ar.po
+++ b/addons/web/i18n/ar.po
@@ -18,18 +18,18 @@
# Ghaith Gammar <g.gammar@saharaifs.net>, 2019
# Osama Ahmaro <osamaahmaro@gmail.com>, 2019
# Mahmood Al Halwachi <mahmood.alhalwachi@gmail.com>, 2019
-# Shaima Safar <shaima.safar@open-inside.com>, 2019
# Islam Eldeeb <islameldeb@gmail.com>, 2019
# Abdulmajeed Alomar <majeeed87@gmail.com>, 2019
# Mustafa Rawi <mustafa@cubexco.com>, 2019
+# Shaima Safar <shaima.safar@open-inside.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Mustafa Rawi <mustafa@cubexco.com>, 2019\n"
+"Last-Translator: Shaima Safar <shaima.safar@open-inside.com>, 2019\n"
"Language-Team: Arabic (https://www.transifex.com/odoo/teams/41243/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1282,6 +1282,7 @@ msgstr "الوصف"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2657,6 +2658,13 @@ msgstr "برتقالي"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "غير ذلك"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3104,6 +3112,7 @@ msgstr "التشبع %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3758,6 +3767,13 @@ msgstr "تتبع الأثر:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4010,6 +4026,7 @@ msgstr "نوع واجهة العرض"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4165,6 +4182,15 @@ msgstr "قد لا تصدق هذا،<br />لكن التطبيق يقوم بالت
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/cs.po b/addons/web/i18n/cs.po
index 92cf988e108..6131cf1ec16 100644
--- a/addons/web/i18n/cs.po
+++ b/addons/web/i18n/cs.po
@@ -3,13 +3,18 @@
# * web
#
# Translators:
+# Martin Trigaux, 2019
+# Chris <krystof.reklamy13@gmail.com>, 2019
+# Jaroslav Helemik Nemec <nemec@helemik.cz>, 2019
+# Jan Horzinka <jan.horzinka@centrum.cz>, 2019
+# Michal Veselý <michal@veselyberanek.net>, 2019
# trendspotter <j.podhorecky@volny.cz>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
"Last-Translator: trendspotter <j.podhorecky@volny.cz>, 2019\n"
"Language-Team: Czech (https://www.transifex.com/odoo/teams/41243/cs/)\n"
@@ -24,28 +29,28 @@ msgstr ""
#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
#, python-format
msgid " [Me]"
-msgstr ""
+msgstr "[Já]"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid " and "
-msgstr ""
+msgstr "a"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_facet.js:0
#, python-format
msgid " or "
-msgstr ""
+msgstr "nebo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid " records"
-msgstr ""
+msgstr "záznamy"
#. module: web
#. openerp-web
@@ -60,49 +65,49 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "%(field)s %(operator)s"
-msgstr ""
+msgstr "%(field)s %(operator)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "%(field)s %(operator)s \"%(value)s\""
-msgstr ""
+msgstr "%(field)s %(operator)s \"%(value)s\""
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "%d days ago"
-msgstr ""
+msgstr "před %d dny"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "%d hours ago"
-msgstr ""
+msgstr "před %d hodinami"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "%d minutes ago"
-msgstr ""
+msgstr "před %d minutami"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "%d months ago"
-msgstr ""
+msgstr "před %d měsíci"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "%d years ago"
-msgstr ""
+msgstr "před %d lety"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.webclient_bootstrap
@@ -111,48 +116,51 @@ msgid ""
" &lt;body class=\"ie9\"&gt;\n"
" &lt;![endif]--&gt;"
msgstr ""
+"&lt;!--[if lt IE 10]&gt;\n"
+" &lt;body class=\"ie9\"&gt;\n"
+" &lt;![endif]--&gt;"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/notification.xml:0
#, python-format
msgid "&times;"
-msgstr ""
+msgstr "&times;"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "'%s' is not a correct date"
-msgstr ""
+msgstr "'%s' není platné datum"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/time.js:0
#, python-format
msgid "'%s' is not a correct date, datetime nor time"
-msgstr ""
+msgstr "'%s' není platné datum, datum/čas, ani čas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "'%s' is not a correct datetime"
-msgstr ""
+msgstr "'%s' není platné datum/čas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "'%s' is not a correct float"
-msgstr ""
+msgstr "'%s' není platná hodnota v plovoucí desetinné čárce"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "'%s' is not a correct integer"
-msgstr ""
+msgstr "'%s' není platné celé číslo"
#. module: web
#. openerp-web
@@ -166,14 +174,14 @@ msgstr ""
#: code:addons/web/static/src/js/core/time.js:0
#, python-format
msgid "'%s' is not convertible to date, datetime nor time"
-msgstr ""
+msgstr "'%s' nelze převést na datum, datum/čas, ani čas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "(change)"
-msgstr ""
+msgstr "(změna)"
#. module: web
#. openerp-web
@@ -181,53 +189,55 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "(count)"
-msgstr ""
+msgstr "(počet)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "(no string)"
-msgstr ""
+msgstr "(prázdný text)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "(nolabel)"
-msgstr ""
+msgstr "(bez štítku)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "1 record"
-msgstr ""
+msgstr "1 záznam"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_background
msgid "<i class=\"fa fa-at\" role=\"img\" aria-label=\"Email\" title=\"Email\"/>"
-msgstr ""
+msgstr "<i class=\"fa fa-at\" role=\"img\" aria-label=\"Email\" title=\"E-mail\"/>"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_background
msgid "<i class=\"fa fa-building-o\" role=\"img\" aria-label=\"Fiscal number\"/>"
-msgstr ""
+msgstr "<i class=\"fa fa-building-o\" role=\"img\" aria-label=\"Fiscal number\"/>"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_background
msgid "<i class=\"fa fa-globe\" role=\"img\" aria-label=\"Website\" title=\"Website\"/>"
msgstr ""
+"<i class=\"fa fa-globe\" role=\"img\" aria-label=\"Website\" title=\"Webová "
+"strana\"/>"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_background
msgid "<i class=\"fa fa-phone\" role=\"img\" aria-label=\"Phone\" title=\"Phone\"/>"
-msgstr ""
+msgstr "<i class=\"fa fa-phone\" role=\"img\" aria-label=\"Phone\" title=\"Telefon\"/>"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.frontend_layout
msgid "<span>Copyright &amp;copy;</span>"
-msgstr ""
+msgstr "<span>Copyright &amp;copy;</span>"
#. module: web
#. openerp-web
@@ -244,6 +254,8 @@ msgid ""
"A popup window has been blocked. You may need to change your browser "
"settings to allow popup windows for this page."
msgstr ""
+"Vyskakovací okno bylo zablokováno. Možná budete muset změnit nastavení "
+"prohlížeče tak, aby pro tuto stránku povolovala vyskakovací okna."
#. module: web
#. openerp-web
@@ -253,67 +265,70 @@ msgid ""
"A popup window with your report was blocked. You may need to change your "
"browser settings to allow popup windows for this page."
msgstr ""
+"Vyskakovací okno s vaším přehledem bylo zablokováno. Možná budete muset "
+"změnit nastavení prohlížeče tak, aby pro tuto stránku povoloval vyskakovací "
+"okna."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "ALL"
-msgstr ""
+msgstr "VŠE"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "ANY"
-msgstr ""
+msgstr "COKOLIV"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Access Denied"
-msgstr ""
+msgstr "Přístup zamítnut"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Access Error"
-msgstr ""
+msgstr "Chyba přístupu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Access to all Enterprise Apps"
-msgstr ""
+msgstr "Přístup ke všem podnikovým aplikacím"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/sidebar.js:0
#, python-format
msgid "Action"
-msgstr ""
+msgstr "Akce"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Action ID:"
-msgstr ""
+msgstr "ID akce:"
#. module: web
#: model:ir.model,name:web.model_ir_actions_act_window_view
msgid "Action Window View"
-msgstr ""
+msgstr "Zobrazení okna akcí"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Activate Assets Debugging"
-msgstr ""
+msgstr "Aktivace ladění položek"
#. module: web
#. openerp-web
@@ -329,42 +344,42 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Add"
-msgstr ""
+msgstr "Přidat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:0
#, python-format
msgid "Add %s"
-msgstr ""
+msgstr "Přidat %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add Custom Filter"
-msgstr ""
+msgstr "Přidat vlastní filtr"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add Custom Group"
-msgstr ""
+msgstr "Přidat vlastní skupinu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Add a Column"
-msgstr ""
+msgstr "Přidat sloupec"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add a condition"
-msgstr ""
+msgstr "Přidat podmínku"
#. module: web
#. openerp-web
@@ -372,98 +387,98 @@ msgstr ""
#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
#, python-format
msgid "Add a line"
-msgstr ""
+msgstr "Přidat řádek"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add branch"
-msgstr ""
+msgstr "Přidat větev"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Add column"
-msgstr ""
+msgstr "Přidat sloupec"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add filter"
-msgstr ""
+msgstr "Přidat filtr"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add new value"
-msgstr ""
+msgstr "Přidat novou hodnotu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add node"
-msgstr ""
+msgstr "Přidat uzel"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add tag"
-msgstr ""
+msgstr "Přidat značku"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Add to Favorites"
-msgstr ""
+msgstr "Přidat k oblíbeným"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add..."
-msgstr ""
+msgstr "Přidat..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Add: "
-msgstr ""
+msgstr "Přidat "
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/signature.js:0
#, python-format
msgid "Adopt Your Signature"
-msgstr ""
+msgstr "Přijmout svůj podpis"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/signature.js:0
#, python-format
msgid "Adopt and Sign"
-msgstr ""
+msgstr "Přijmout a podepsat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Advanced Search..."
-msgstr ""
+msgstr "Pokročilé hledání..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/dialog.js:0
#, python-format
msgid "Alert"
-msgstr ""
+msgstr "Výstraha"
#. module: web
#. openerp-web
@@ -472,7 +487,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "All"
-msgstr ""
+msgstr "Vše"
#. module: web
#. openerp-web
@@ -480,14 +495,14 @@ msgstr ""
#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:0
#, python-format
msgid "All day"
-msgstr ""
+msgstr "Celý den"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "All users"
-msgstr ""
+msgstr "Všichni uživatelé"
#. module: web
#. openerp-web
@@ -509,14 +524,14 @@ msgstr ""
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Alt"
-msgstr ""
+msgstr "Alt"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/crash_manager.xml:0
#, python-format
msgid "An error occurred"
-msgstr ""
+msgstr "Vyskytla se chyba"
#. module: web
#. openerp-web
@@ -527,13 +542,16 @@ msgid ""
"JavaScript file served from a different origin. (Opening your browser "
"console might give you a hint on the error.)"
msgstr ""
+"Došlo k neznámé chybě CORS. Chyba pravděpodobně pochází z JavaScript souboru"
+" poskytnutého serverem z jiného původu. (Otevření konzoly prohlížeče vám "
+"může dát nápovědu k chybě.)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "And more"
-msgstr ""
+msgstr "A více"
#. module: web
#. openerp-web
@@ -541,7 +559,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Any"
-msgstr ""
+msgstr "Jakýkoliv"
#. module: web
#. openerp-web
@@ -550,7 +568,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Apply"
-msgstr ""
+msgstr "Použít"
#. module: web
#. openerp-web
@@ -558,14 +576,14 @@ msgstr ""
#: code:addons/web/static/src/js/views/list/list_controller.js:0
#, python-format
msgid "Archive"
-msgstr ""
+msgstr "Archivovat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Archive All"
-msgstr ""
+msgstr "Archivovat vše"
#. module: web
#. openerp-web
@@ -573,14 +591,14 @@ msgstr ""
#, python-format
msgid ""
"Are you sure that you want to archive all the records from this column?"
-msgstr ""
+msgstr "Opravdu chcete archivovat všechny záznamy z tohoto sloupce?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/list/list_controller.js:0
#, python-format
msgid "Are you sure that you want to archive all the selected records?"
-msgstr ""
+msgstr "Opravdu chcete archivovat všechny vybrané záznamy?"
#. module: web
#. openerp-web
@@ -594,14 +612,14 @@ msgstr ""
#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
#, python-format
msgid "Are you sure that you want to remove this column ?"
-msgstr ""
+msgstr "Opravdu chcete odebrat tento sloupec?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#, python-format
msgid "Are you sure that you want to remove this filter?"
-msgstr ""
+msgstr "Opravdu chcete tento filtr odebrat?"
#. module: web
#. openerp-web
@@ -609,28 +627,28 @@ msgstr ""
#: code:addons/web/static/src/js/views/calendar/calendar_controller.js:0
#, python-format
msgid "Are you sure you want to delete this record ?"
-msgstr ""
+msgstr "Opravdu jste si jisti, že chcete smazat tento záznam ?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Attach"
-msgstr ""
+msgstr "Připojit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Attachment"
-msgstr ""
+msgstr "Příloha"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Attachment :"
-msgstr ""
+msgstr "Příloha:"
#. module: web
#. openerp-web
@@ -638,14 +656,14 @@ msgstr ""
#: code:addons/web/static/src/xml/name_and_signature.xml:0
#, python-format
msgid "Auto"
-msgstr ""
+msgstr "Automaticky"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Available fields"
-msgstr ""
+msgstr "Dostupná pole"
#. module: web
#. openerp-web
@@ -656,40 +674,40 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Avatar"
-msgstr ""
+msgstr "Avatar"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Badges"
-msgstr ""
+msgstr "Odznaky"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Bar Chart"
-msgstr ""
+msgstr "Sloupcový graf"
#. module: web
#: model:ir.model,name:web.model_base
msgid "Base"
-msgstr ""
+msgstr "Základní část"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Based On"
-msgstr ""
+msgstr "Na základě"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Become Superuser"
-msgstr ""
+msgstr "Staňte se Superuživatelem"
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -698,6 +716,8 @@ msgid ""
"Binary fields can not be exported to Excel unless their content is "
"base64-encoded. That does not seem to be the case for %s."
msgstr ""
+"Binární pole nelze exportovat do aplikace Excel, pokud jejich obsah není "
+"zakódován base64. Zdá se, že tomu tak není %s."
#. module: web
#. openerp-web
@@ -705,21 +725,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Binary file"
-msgstr ""
+msgstr "Binární soubor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
#, python-format
msgid "Blue"
-msgstr ""
+msgstr "Modrá"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Bugfixes guarantee"
-msgstr ""
+msgstr "Záruka na opravy chyb"
#. module: web
#. openerp-web
@@ -727,14 +747,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Button"
-msgstr ""
+msgstr "Tlačítko"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Button Type:"
-msgstr ""
+msgstr "Typ tlačítka:"
#. module: web
#. openerp-web
@@ -747,6 +767,10 @@ msgid ""
"for all purposes when it is used on documents, including legally binding "
"contracts."
msgstr ""
+"Kliknutím na položku Přijmout a podepsat souhlasím s tím, že vybrané podpisy"
+" / iniciály budou platné elektronické zastoupení mých ručně psaných podpisů "
+"/ iniciál pro všechny účely, pokud jsou používány v dokumentech včetně "
+"právně závazných smluv."
#. module: web
#. openerp-web
@@ -760,21 +784,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "CLEAR"
-msgstr ""
+msgstr "VYMAZAT"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/calendar/calendar_view.js:0
#, python-format
msgid "Calendar"
-msgstr ""
+msgstr "Kalendář"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/calendar/calendar_view.js:0
#, python-format
msgid "Calendar view has not defined 'date_start' attribute."
-msgstr ""
+msgstr "Pohled kalendáře nemá definovaný atribut 'date_start'."
#. module: web
#. openerp-web
@@ -790,7 +814,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Cancel"
-msgstr ""
+msgstr "Zrušit"
#. module: web
#. openerp-web
@@ -814,21 +838,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Change Password"
-msgstr ""
+msgstr "Změnit heslo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Change default:"
-msgstr ""
+msgstr "Změnit výchozí:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Checkbox"
-msgstr ""
+msgstr "Zaškrtávací pole"
#. module: web
#. openerp-web
@@ -842,7 +866,7 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#, python-format
msgid "Choose"
-msgstr ""
+msgstr "Zvolit"
#. module: web
#. openerp-web
@@ -852,21 +876,21 @@ msgstr ""
#: code:addons/web/static/src/xml/name_and_signature.xml:0
#, python-format
msgid "Clear"
-msgstr ""
+msgstr "Vymazat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Clear Events"
-msgstr ""
+msgstr "Vymazat Události"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Clear Signature"
-msgstr ""
+msgstr "Vymazat podpis"
#. module: web
#. openerp-web
@@ -877,7 +901,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Close"
-msgstr ""
+msgstr "Zavřít"
#. module: web
#. openerp-web
@@ -891,12 +915,12 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Column title"
-msgstr ""
+msgstr "Název sloupce"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.frontend_layout
msgid "Company name"
-msgstr ""
+msgstr "Název společnosti"
#. module: web
#. openerp-web
@@ -910,14 +934,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Condition:"
-msgstr ""
+msgstr "Podmínka:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Confirm New Password"
-msgstr ""
+msgstr "Potvrdit nové heslo"
#. module: web
#. openerp-web
@@ -925,21 +949,21 @@ msgstr ""
#: code:addons/web/static/src/js/core/dialog.js:0
#, python-format
msgid "Confirmation"
-msgstr ""
+msgstr "Potvrzení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
#, python-format
msgid "Connection lost"
-msgstr ""
+msgstr "Spojení ztraceno"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
#, python-format
msgid "Connection restored"
-msgstr ""
+msgstr "Připojení obnoveno"
#. module: web
#. openerp-web
@@ -947,7 +971,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Context:"
-msgstr ""
+msgstr "Kontext:"
#. module: web
#. openerp-web
@@ -969,7 +993,7 @@ msgstr ""
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Copied !"
-msgstr ""
+msgstr "Zkopírováno !"
#. module: web
#. openerp-web
@@ -977,14 +1001,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Copy Text"
-msgstr ""
+msgstr "Kopírovat text"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/crash_manager.xml:0
#, python-format
msgid "Copy the full error to clipboard"
-msgstr ""
+msgstr "Zkopírujte celou chybu do schránky"
#. module: web
#. openerp-web
@@ -999,7 +1023,7 @@ msgstr ""
#: code:addons/web/static/src/js/core/ajax.js:0
#, python-format
msgid "Could not connect to the server"
-msgstr ""
+msgstr "Nelze se připojit k serveru"
#. module: web
#. openerp-web
@@ -1007,14 +1031,14 @@ msgstr ""
#: code:addons/web/static/src/js/fields/signature.js:0
#, python-format
msgid "Could not display the selected image."
-msgstr ""
+msgstr "Nelze zobrazit zvolený obrázek."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/utils.js:0
#, python-format
msgid "Could not serialize XML"
-msgstr ""
+msgstr "Nemohu serializovat XML"
#. module: web
#. openerp-web
@@ -1035,7 +1059,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Count"
-msgstr ""
+msgstr "Počet"
#. module: web
#. openerp-web
@@ -1048,7 +1072,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Create"
-msgstr ""
+msgstr "Vytvořit"
#. module: web
#. openerp-web
@@ -1056,77 +1080,77 @@ msgstr ""
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#, python-format
msgid "Create "
-msgstr ""
+msgstr "Vytvořit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Create \"<strong>%s</strong>\""
-msgstr ""
+msgstr "Vytvořit \"<strong>%s</strong>\""
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Create a %s"
-msgstr ""
+msgstr "Vytvořit %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Create a new record"
-msgstr ""
+msgstr "Vytvořit nový záznam"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Create and Edit..."
-msgstr ""
+msgstr "Vytvořit a upravit..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Create and edit"
-msgstr ""
+msgstr "Vytvořit a upravit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Create: "
-msgstr ""
+msgstr "Vytvořit: "
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/calendar/calendar_controller.js:0
#, python-format
msgid "Create: %s"
-msgstr ""
+msgstr "Vytvořit: %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Created by :"
-msgstr ""
+msgstr "Vytvořeno:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Creation Date:"
-msgstr ""
+msgstr "Datum vytvoření:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Creation User:"
-msgstr ""
+msgstr "Vytvořil:"
#. module: web
#. openerp-web
@@ -1142,7 +1166,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Dark blue"
-msgstr ""
+msgstr "Tmavě modrá"
#. module: web
#. openerp-web
@@ -1156,21 +1180,21 @@ msgstr ""
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
msgid "Database"
-msgstr ""
+msgstr "Databáze"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Date"
-msgstr ""
+msgstr "Datum"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Date & Time"
-msgstr ""
+msgstr "Datum a čas"
#. module: web
#. openerp-web
@@ -1179,7 +1203,7 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Day"
-msgstr ""
+msgstr "Den"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.debug_icon
@@ -1199,7 +1223,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Default:"
-msgstr ""
+msgstr "Výchozí:"
#. module: web
#. openerp-web
@@ -1212,35 +1236,35 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Delete"
-msgstr ""
+msgstr "Smazat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Delete node"
-msgstr ""
+msgstr "Smazat uzel"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
#, python-format
msgid "Delete row "
-msgstr ""
+msgstr "Smazat řádek"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Delete this attachment"
-msgstr ""
+msgstr "Smazat tuto přílohu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Description"
-msgstr ""
+msgstr "Popis"
#. module: web
#. openerp-web
@@ -1248,33 +1272,34 @@ msgstr ""
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Discard"
-msgstr ""
+msgstr "Zrušit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Discard a record modification"
-msgstr ""
+msgstr "Zrušit změnu záznamu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Do you really want to delete this export template?"
-msgstr ""
+msgstr "Opravdu chcete odstranit tuto exportní šablonu?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:0
#, python-format
msgid "Do you really want to delete this filter from favorites ?"
-msgstr ""
+msgstr "Opravdu chcete smazat tento filter z oblíbených?"
#. module: web
#. openerp-web
@@ -1296,7 +1321,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Documentation"
-msgstr ""
+msgstr "Dokumentace"
#. module: web
#. openerp-web
@@ -1304,35 +1329,35 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Domain"
-msgstr ""
+msgstr "Doména"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "Domain error"
-msgstr ""
+msgstr "Chyba domény"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Domain:"
-msgstr ""
+msgstr "Doména:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/misc.js:0
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
-msgstr ""
+msgstr "Ještě neodcházejte,<br />stále probíhá načítání..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Download xls"
-msgstr ""
+msgstr "Stáhnout xls"
#. module: web
#. openerp-web
@@ -1340,7 +1365,7 @@ msgstr ""
#: code:addons/web/static/src/xml/name_and_signature.xml:0
#, python-format
msgid "Draw"
-msgstr ""
+msgstr "Kreslit"
#. module: web
#. openerp-web
@@ -1348,14 +1373,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Dropdown menu"
-msgstr ""
+msgstr "Rozbalovací nabídka"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/form/form_controller.js:0
#, python-format
msgid "Duplicate"
-msgstr ""
+msgstr "Duplikovat"
#. module: web
#. openerp-web
@@ -1366,21 +1391,21 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Edit"
-msgstr ""
+msgstr "Upravit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Edit Action"
-msgstr ""
+msgstr "Upravit akci"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
#, python-format
msgid "Edit Column"
-msgstr ""
+msgstr "Upravit sloupec"
#. module: web
#. openerp-web
@@ -1394,28 +1419,28 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Edit Domain"
-msgstr ""
+msgstr "Upravit doménu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Edit Stage"
-msgstr ""
+msgstr "Upravit Fázi"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Edit View:"
-msgstr ""
+msgstr "Upravit zobrazení:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Edit a record"
-msgstr ""
+msgstr "Upravit záznam"
#. module: web
#. openerp-web
@@ -1423,12 +1448,12 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web.login
#, python-format
msgid "Email"
-msgstr ""
+msgstr "E-mail"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
msgid "Email:"
-msgstr ""
+msgstr "Email:"
#. module: web
#. openerp-web
@@ -1437,13 +1462,13 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:0
#, python-format
msgid "Error"
-msgstr ""
+msgstr "Chyba"
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "Error, password not changed !"
-msgstr ""
+msgstr "Chyba, heslo nebylo změněno!"
#. module: web
#. openerp-web
@@ -1457,21 +1482,21 @@ msgstr ""
#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
#, python-format
msgid "Everybody's calendars"
-msgstr ""
+msgstr "Všechny sdílené kalendáře"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
#, python-format
msgid "Everything"
-msgstr ""
+msgstr "Všechno"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Expand all"
-msgstr ""
+msgstr "Rozbalit vše"
#. module: web
#. openerp-web
@@ -1479,21 +1504,21 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Export"
-msgstr ""
+msgstr "Export"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Export Data"
-msgstr ""
+msgstr "Exportovat data"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Export Format:"
-msgstr ""
+msgstr "Exportní formát:"
#. module: web
#. openerp-web
@@ -1501,21 +1526,21 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "External ID"
-msgstr ""
+msgstr "Externí ID"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "External link"
-msgstr ""
+msgstr "Externí odkaz"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "FILTER"
-msgstr ""
+msgstr "FILTR"
#. module: web
#. openerp-web
@@ -1529,21 +1554,21 @@ msgstr ""
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "False"
-msgstr ""
+msgstr "Neplatné"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#, python-format
msgid "Favorites"
-msgstr ""
+msgstr "Oblíbené"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Field:"
-msgstr ""
+msgstr "Pole:"
#. module: web
#. openerp-web
@@ -1551,42 +1576,42 @@ msgstr ""
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Fields View Get"
-msgstr ""
+msgstr "Získat pole pohledu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Fields to export"
-msgstr ""
+msgstr "Pole k exportu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "File"
-msgstr ""
+msgstr "Soubor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "File Upload"
-msgstr ""
+msgstr "Nahrát soubor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "File upload"
-msgstr ""
+msgstr "Nahrát soubor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "Filter on: %s"
-msgstr ""
+msgstr "Filtrovat: %s"
#. module: web
#. openerp-web
@@ -1600,28 +1625,28 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/filter_menu.js:0
#, python-format
msgid "Filters"
-msgstr ""
+msgstr "Filtry"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Flip axis"
-msgstr ""
+msgstr "Osa převrácení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Fold"
-msgstr ""
+msgstr "Sbalit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Followed by"
-msgstr ""
+msgstr "Sledován od"
#. module: web
#. openerp-web
@@ -1638,7 +1663,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/form/form_view.js:0
#, python-format
msgid "Form"
-msgstr ""
+msgstr "Formulář"
#. module: web
#. openerp-web
@@ -1652,7 +1677,7 @@ msgstr ""
#: code:addons/web/static/src/xml/name_and_signature.xml:0
#, python-format
msgid "Full Name"
-msgstr ""
+msgstr "Celé jméno"
#. module: web
#. openerp-web
@@ -1668,7 +1693,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Get this feature and much more with Odoo Enterprise!"
-msgstr ""
+msgstr "Získejte tuto funkci a mnohem více s Odoo Enterprise!"
#. module: web
#. openerp-web
@@ -1689,7 +1714,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/graph/graph_view.js:0
#, python-format
msgid "Graph"
-msgstr ""
+msgstr "Graf"
#. module: web
#. openerp-web
@@ -1699,26 +1724,26 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Green"
-msgstr ""
+msgstr "Zelená"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/groupby_menu.js:0
#, python-format
msgid "Group By"
-msgstr ""
+msgstr "Seskupit podle"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "Group by: %s"
-msgstr ""
+msgstr "Seskupit podle: %s"
#. module: web
#: model:ir.model,name:web.model_ir_http
msgid "HTTP Routing"
-msgstr ""
+msgstr "HTTP Routing"
#. module: web
#. openerp-web
@@ -1739,7 +1764,7 @@ msgstr "Skrýt v Kanbanu"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Hit DOWN to navigate to the list below"
-msgstr ""
+msgstr "Stisknutím tlačítka DOWN přejděte na níže uvedený seznam"
#. module: web
#. openerp-web
@@ -1753,21 +1778,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Hit ENTER to CREATE"
-msgstr ""
+msgstr "Stiskněte ENTER pro CREATE"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Hit ENTER to SAVE"
-msgstr ""
+msgstr "Zmáčknout ENTER pro uložení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Hit ESCAPE to DISCARD"
-msgstr ""
+msgstr "Stiskněte ESCAPE pro ZRUŠENÍ"
#. module: web
#. openerp-web
@@ -1781,7 +1806,7 @@ msgstr "Odstín"
#: code:addons/web/static/src/js/core/dialog.js:0
#, python-format
msgid "I am sure about this."
-msgstr ""
+msgstr "Jsem si tím jistý."
#. module: web
#. openerp-web
@@ -1795,7 +1820,7 @@ msgstr ""
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "ID:"
-msgstr ""
+msgstr "ID:"
#. module: web
#. openerp-web
@@ -1805,14 +1830,14 @@ msgstr ""
#: code:addons/web/static/src/js/fields/signature.js:0
#, python-format
msgid "Image"
-msgstr ""
+msgstr "Obrázek"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Integer"
-msgstr ""
+msgstr "Celé číslo"
#. module: web
#. openerp-web
@@ -1820,7 +1845,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
#, python-format
msgid "Invalid data"
-msgstr ""
+msgstr "Neplatná data"
#. module: web
#: code:addons/web/controllers/main.py:0 code:addons/web/controllers/main.py:0
@@ -1829,13 +1854,15 @@ msgid ""
"Invalid database name. Only alphanumerical characters, underscore, hyphen "
"and dot are allowed."
msgstr ""
+"Neplatný název databáze. Povoleny jsou pouze alfanumerické znaky, "
+"podtržítko, spojovník a tečka."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Invalid domain"
-msgstr ""
+msgstr "Neplatná doména"
#. module: web
#. openerp-web
@@ -1863,48 +1890,48 @@ msgstr ""
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "JS Mobile Tests"
-msgstr ""
+msgstr "JS Mobile Testy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "JS Tests"
-msgstr ""
+msgstr "JS testy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/kanban/kanban_view.js:0
#, python-format
msgid "Kanban"
-msgstr ""
+msgstr "Kanban"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/user_menu.js:0
#, python-format
msgid "Keyboard Shortcuts"
-msgstr ""
+msgstr "Klávesové zkratky"
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "Languages"
-msgstr ""
+msgstr "Jazyky"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last 30 Days"
-msgstr ""
+msgstr "Posledních 30 dní"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last 365 Days"
-msgstr ""
+msgstr "Posledních 365 dní"
#. module: web
#. openerp-web
@@ -1918,56 +1945,56 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last 7 Days"
-msgstr ""
+msgstr "Posledních 7 dní"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last Month"
-msgstr ""
+msgstr "Poslední měsíc"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last Quarter"
-msgstr ""
+msgstr "Poslední čtvrtina"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last Week"
-msgstr ""
+msgstr "Minulý týden"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last Year"
-msgstr ""
+msgstr "Minulý rok"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Latest Modification Date:"
-msgstr ""
+msgstr "Naposledy změneno:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Latest Modification by:"
-msgstr ""
+msgstr "Naposledy změnil:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Leave the Developer Tools"
-msgstr ""
+msgstr "Opustit Vývojářské Nástroje"
#. module: web
#. openerp-web
@@ -1976,28 +2003,28 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Light blue"
-msgstr ""
+msgstr "Světle modrá"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
#, python-format
msgid "Lightness %"
-msgstr ""
+msgstr "Světlost %"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Line Chart"
-msgstr ""
+msgstr "Čárový graf"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/list/list_view.js:0
#, python-format
msgid "List"
-msgstr ""
+msgstr "Seznam"
#. module: web
#. openerp-web
@@ -2005,35 +2032,35 @@ msgstr ""
#: code:addons/web/static/src/xml/name_and_signature.xml:0
#, python-format
msgid "Load"
-msgstr ""
+msgstr "Načíst"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Load more... ("
-msgstr ""
+msgstr "Načíst více... ("
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/loading.js:0
#, python-format
msgid "Loading"
-msgstr ""
+msgstr "načítání"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/loading.js:0
#, python-format
msgid "Loading (%d)"
-msgstr ""
+msgstr "Načítání (%d)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Loading, please wait..."
-msgstr ""
+msgstr "Načítání prosím čekejte..."
#. module: web
#. openerp-web
@@ -2043,24 +2070,24 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Loading..."
-msgstr ""
+msgstr "Načítání..."
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
msgid "Log in"
-msgstr ""
+msgstr "Přihlásit se"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
msgid "Log in as superuser"
-msgstr ""
+msgstr "Přihlaste se jako superuser"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Log out"
-msgstr ""
+msgstr "Odhlásit se"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_background
@@ -2070,19 +2097,19 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web.frontend_layout
#: model_terms:ir.ui.view,arch_db:web.login_layout
msgid "Logo"
-msgstr ""
+msgstr "Logo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Mac"
-msgstr ""
+msgstr "Mac"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
msgid "Mail:"
-msgstr ""
+msgstr "E-mail:"
#. module: web
#. openerp-web
@@ -2090,12 +2117,12 @@ msgstr ""
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Manage Attachments"
-msgstr ""
+msgstr "Správa příloh"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login_layout
msgid "Manage Databases"
-msgstr ""
+msgstr "Správa databází"
#. module: web
#. openerp-web
@@ -2103,7 +2130,7 @@ msgstr ""
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Manage Filters"
-msgstr ""
+msgstr "Spravovat filtry"
#. module: web
#. openerp-web
@@ -2131,21 +2158,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Match records with"
-msgstr ""
+msgstr "Shoda se záznamy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Match records with the following rule:"
-msgstr ""
+msgstr "Shoda záznamů s následujícím pravidlem:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/misc.js:0
#, python-format
msgid "Maybe you should consider reloading the application by pressing F5..."
-msgstr ""
+msgstr "Možná byste měli zvážit znovunačtení aplikace stisknutím F5..."
#. module: web
#. openerp-web
@@ -2153,7 +2180,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Measures"
-msgstr ""
+msgstr "Měřítka"
#. module: web
#. openerp-web
@@ -2162,21 +2189,21 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Medium blue"
-msgstr ""
+msgstr "Středně modrá"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "Metadata (%s)"
-msgstr ""
+msgstr "Metadata (%s)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Method:"
-msgstr ""
+msgstr "Metoda:"
#. module: web
#. openerp-web
@@ -2190,14 +2217,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Mobile support"
-msgstr ""
+msgstr "Podpora mobilních zařízení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Modified by :"
-msgstr ""
+msgstr "Změněno:"
#. module: web
#. openerp-web
@@ -2205,7 +2232,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Modifiers:"
-msgstr ""
+msgstr "Upravující:"
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -2229,7 +2256,7 @@ msgstr "Měnový"
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Month"
-msgstr ""
+msgstr "Měsíc"
#. module: web
#. openerp-web
@@ -2237,56 +2264,56 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "More"
-msgstr ""
+msgstr "Více"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Multiline Text"
-msgstr ""
+msgstr "Víceřádkový text"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "My Odoo.com account"
-msgstr ""
+msgstr "Můj účet Odoo.com"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "NONE"
-msgstr ""
+msgstr "ŽÁDNÝ"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Name:"
-msgstr ""
+msgstr "Název:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/basic/basic_model.js:0
#, python-format
msgid "New"
-msgstr ""
+msgstr "Nové"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "New Password"
-msgstr ""
+msgstr "Nové heslo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "New design"
-msgstr ""
+msgstr "Nová úprava"
#. module: web
#. openerp-web
@@ -2302,28 +2329,28 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Next"
-msgstr ""
+msgstr "Další"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "No"
-msgstr ""
+msgstr "Ne"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "No Update:"
-msgstr ""
+msgstr "Žádná aktualizace:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "No attachment available"
-msgstr ""
+msgstr "K dispozici není žádná příloha"
#. module: web
#. openerp-web
@@ -2331,7 +2358,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "No color"
-msgstr ""
+msgstr "Žádná barva"
#. module: web
#. openerp-web
@@ -2345,7 +2372,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "No data to display"
-msgstr ""
+msgstr "Žádná data k zobrazení"
#. module: web
#. openerp-web
@@ -2359,14 +2386,14 @@ msgstr ""
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "No metadata available"
-msgstr ""
+msgstr "Žádné metadata nejsou k dispozici"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "No records"
-msgstr ""
+msgstr "Žádné záznamy"
#. module: web
#. openerp-web
@@ -2380,7 +2407,7 @@ msgstr ""
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "No results to show..."
-msgstr ""
+msgstr "Nic nenalezeno..."
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -2400,7 +2427,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "None"
-msgstr ""
+msgstr "Nic"
#. module: web
#: code:addons/web/models/models.py:0 code:addons/web/models/models.py:0
@@ -2414,14 +2441,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Not active state"
-msgstr ""
+msgstr "Stav není aktivní"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Not active state, click to change it"
-msgstr ""
+msgstr "Není aktivní stav, klepnutím ho změňte"
#. module: web
#. openerp-web
@@ -2429,7 +2456,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Object:"
-msgstr ""
+msgstr "Objekt:"
#. module: web
#. openerp-web
@@ -2437,14 +2464,14 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web.brand_promotion_message
#, python-format
msgid "Odoo"
-msgstr ""
+msgstr "Odoo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/apps.js:0
#, python-format
msgid "Odoo Apps will be available soon"
-msgstr ""
+msgstr "Odoo Apps budou brzy k dispozici"
#. module: web
#. openerp-web
@@ -2454,35 +2481,35 @@ msgstr ""
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Odoo Client Error"
-msgstr ""
+msgstr "Chyba klienta Odoo "
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/upgrade_fields.js:0
#, python-format
msgid "Odoo Enterprise"
-msgstr ""
+msgstr "Odoo Enterprise"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Odoo Error"
-msgstr ""
+msgstr "Odoo chyba"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Odoo Session Expired"
-msgstr ""
+msgstr "Platnost Odoo vypršela"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Odoo Warning"
-msgstr ""
+msgstr "Odoo varování"
#. module: web
#. openerp-web
@@ -2493,21 +2520,21 @@ msgstr ""
#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
#, python-format
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Old Password"
-msgstr ""
+msgstr "Staré heslo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "On change:"
-msgstr ""
+msgstr "Při změně:"
#. module: web
#. openerp-web
@@ -2521,14 +2548,14 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Only Integer Value should be valid."
-msgstr ""
+msgstr "Platná by měla být pouze celočíselná hodnota."
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid ""
"Only employee can access this database. Please contact the administrator."
-msgstr ""
+msgstr "Do této databáze má přístup pouze zaměstnanec. Obraťte se na správce."
#. module: web
#: code:addons/web/models/models.py:0
@@ -2551,14 +2578,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Only you"
-msgstr ""
+msgstr "Pouze vy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
#, python-format
msgid "Opacity %"
-msgstr ""
+msgstr "Neprůhlednost %"
#. module: web
#. openerp-web
@@ -2572,21 +2599,21 @@ msgstr ""
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Open the next record"
-msgstr ""
+msgstr "Otevřít další záznam"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Open the previous record"
-msgstr ""
+msgstr "Otevřít předchozí záznam"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Open to kanban view"
-msgstr ""
+msgstr "Otevřít zobrazení kanban"
#. module: web
#. openerp-web
@@ -2604,7 +2631,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#, python-format
msgid "Open: "
-msgstr ""
+msgstr "Otevřít: "
#. module: web
#. openerp-web
@@ -2613,7 +2640,14 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Orange"
-msgstr ""
+msgstr "Oranžový"
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "jiný"
#. module: web
#. openerp-web
@@ -2635,19 +2669,19 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
msgid "Page: <span class=\"page\"/> / <span class=\"topage\"/>"
-msgstr ""
+msgstr "Strana: <span class=\"page\"/> / <span class=\"topage\"/>"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
msgid "Password"
-msgstr ""
+msgstr "Heslo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Percentage"
-msgstr ""
+msgstr "Procenta"
#. module: web
#. openerp-web
@@ -2661,26 +2695,26 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Phone"
-msgstr ""
+msgstr "Telefon"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
msgid "Phone:"
-msgstr ""
+msgstr "Telefon:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#, python-format
msgid "Pick a color"
-msgstr ""
+msgstr "Zvolit barvu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Pie Chart"
-msgstr ""
+msgstr "Koláčový graf"
#. module: web
#. openerp-web
@@ -2690,6 +2724,8 @@ msgid ""
"Pie chart cannot display all zero numbers.. Try to change your domain to "
"display positive results"
msgstr ""
+"Výsečový graf nemůže zobrazit všechna nulová čísla. Zkuste zkusit změnit "
+"svou doménu tak, aby zobrazovala kladné výsledky"
#. module: web
#. openerp-web
@@ -2699,13 +2735,15 @@ msgid ""
"Pie chart cannot mix positive and negative numbers. Try to change your "
"domain to only display positive results"
msgstr ""
+"Koláčový graf nemůže kombinovat kladná a záporná čísla. Zkuste změnit doménu"
+" tak, aby zobrazovala pouze pozitivní výsledky"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/pivot/pivot_view.js:0
#, python-format
msgid "Pivot"
-msgstr ""
+msgstr "Pivot"
#. module: web
#. openerp-web
@@ -2713,35 +2751,35 @@ msgstr ""
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#, python-format
msgid "Please click on the \"save\" button first."
-msgstr ""
+msgstr "Nejprve klikněte na tlačítko \"uložit\"."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Please enter save field list name"
-msgstr ""
+msgstr "Prosíme zadejte jméno seznamu polí k uložení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Please select fields to export..."
-msgstr ""
+msgstr "Prosíme vyberte pole k exportu..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Please select fields to save export list..."
-msgstr ""
+msgstr "Prosíme vyberte pole k uložení exportovaného seznamu..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Please update translations of :"
-msgstr ""
+msgstr "Aktualizujte prosím překlady:"
#. module: web
#. openerp-web
@@ -2749,7 +2787,7 @@ msgstr ""
#, python-format
msgid ""
"Please use the copy button to report the error to your support service."
-msgstr ""
+msgstr "Pomocí tlačítka Kopírovat nahláste chybu své podpoře."
#. module: web
#: model_terms:ir.ui.view,arch_db:web.brand_promotion_message
@@ -2759,14 +2797,14 @@ msgstr ""
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login_layout
msgid "Powered by <span>Odoo</span>"
-msgstr ""
+msgstr "Běží na <span>Odoo</span>"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Preferences"
-msgstr ""
+msgstr "Předvolby"
#. module: web
#: model:ir.actions.report,name:web.action_report_externalpreview
@@ -2785,21 +2823,21 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Previous"
-msgstr ""
+msgstr "Předchozí"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Previous Period"
-msgstr ""
+msgstr "Předchozí období"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Previous Year"
-msgstr ""
+msgstr "Minulý rok"
#. module: web
#. openerp-web
@@ -2807,14 +2845,14 @@ msgstr ""
#: code:addons/web/static/src/xml/report.xml:0
#, python-format
msgid "Print"
-msgstr ""
+msgstr "Tisk"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Priority"
-msgstr ""
+msgstr "Přednost"
#. module: web
#. openerp-web
@@ -2830,7 +2868,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Purple"
-msgstr ""
+msgstr "Fialový"
#. module: web
#. openerp-web
@@ -2863,7 +2901,7 @@ msgstr ""
#. module: web
#: model:ir.model.fields.selection,name:web.selection__ir_actions_act_window_view__view_mode__qweb
msgid "QWeb"
-msgstr ""
+msgstr "QWeb"
#. module: web
#. openerp-web
@@ -2871,14 +2909,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Quarter"
-msgstr ""
+msgstr "Čtvrtina"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Quick add"
-msgstr ""
+msgstr "Rychlé přidání"
#. module: web
#. openerp-web
@@ -2904,7 +2942,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Range"
-msgstr ""
+msgstr "Rozsah"
#. module: web
#. openerp-web
@@ -2914,7 +2952,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Red"
-msgstr ""
+msgstr "Červená"
#. module: web
#. openerp-web
@@ -2942,7 +2980,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Relation:"
-msgstr ""
+msgstr "Vztah:"
#. module: web
#. openerp-web
@@ -2950,14 +2988,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Remove"
-msgstr ""
+msgstr "Odebrat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
#, python-format
msgid "Remove Cover Image"
-msgstr ""
+msgstr "Odstranit úvodní obrázek"
#. module: web
#. openerp-web
@@ -2971,14 +3009,14 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Remove from Favorites"
-msgstr ""
+msgstr "Odstranit z Oblíbených"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Remove tag"
-msgstr ""
+msgstr "Odstranit značku"
#. module: web
#. openerp-web
@@ -2992,42 +3030,42 @@ msgstr ""
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid "Report"
-msgstr ""
+msgstr "Sestava"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Request timeout"
-msgstr ""
+msgstr "Zažádat o timeout"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Run Click Everywhere Test"
-msgstr ""
+msgstr "Spustit test Kliknout kamkoliv"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Run JS Mobile Tests"
-msgstr ""
+msgstr "Spustit JS Mobile testy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Run JS Tests"
-msgstr ""
+msgstr "Spustit JS testy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "SEE RESULT"
-msgstr ""
+msgstr "ZOBRAZIT VÝSLEDEK"
#. module: web
#. openerp-web
@@ -3043,46 +3081,47 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Salmon pink"
-msgstr ""
+msgstr "Lososově růžová"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
#, python-format
msgid "Saturation %"
-msgstr ""
+msgstr "Sytost %"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Save"
-msgstr ""
+msgstr "Uložit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#, python-format
msgid "Save & Close"
-msgstr ""
+msgstr "Uložit a zavřít"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#, python-format
msgid "Save & New"
-msgstr ""
+msgstr "Uložit & Nový"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Save As..."
-msgstr ""
+msgstr "Uložit jako..."
#. module: web
#. openerp-web
@@ -3096,7 +3135,7 @@ msgstr ""
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Save a record"
-msgstr ""
+msgstr "Uložit záznam"
#. module: web
#. openerp-web
@@ -3110,7 +3149,7 @@ msgstr ""
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "Save default"
-msgstr ""
+msgstr "Uložit výchozí"
#. module: web
#. openerp-web
@@ -3118,28 +3157,28 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Search"
-msgstr ""
+msgstr "Hledání"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "Search %(field)s at: %(value)s"
-msgstr ""
+msgstr "Vyhledat %(field)s v: %(value)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "Search %(field)s for: %(value)s"
-msgstr ""
+msgstr "Prohledat %(field)s na výskyt: %(value)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Search More..."
-msgstr ""
+msgstr "Vyhledat více..."
#. module: web
#. openerp-web
@@ -3147,21 +3186,21 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Search..."
-msgstr ""
+msgstr "Hledat..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Search: "
-msgstr ""
+msgstr "Hledat: "
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/crash_manager.xml:0
#, python-format
msgid "See details"
-msgstr ""
+msgstr "viz podrobnosti"
#. module: web
#. openerp-web
@@ -3180,7 +3219,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Select"
-msgstr ""
+msgstr "Vybrat"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
@@ -3201,14 +3240,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Select a model to add a filter."
-msgstr ""
+msgstr "Vybrat model pro přidání filtru."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "Select a view"
-msgstr ""
+msgstr "Vybrat pohled"
#. module: web
#. openerp-web
@@ -3222,42 +3261,42 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Selected records"
-msgstr ""
+msgstr "Vybrané záznamy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Selection"
-msgstr ""
+msgstr "Výběr"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Selection:"
-msgstr ""
+msgstr "Výběr:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
#, python-format
msgid "Set Default"
-msgstr ""
+msgstr "Nastavit výchozí"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Set Defaults"
-msgstr ""
+msgstr "Nastavit výchozí"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
#, python-format
msgid "Set a Cover Image"
-msgstr ""
+msgstr "Nastavit úvodní obrázek"
#. module: web
#. openerp-web
@@ -3271,14 +3310,14 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Settings"
-msgstr ""
+msgstr "Nastavení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Share with all users"
-msgstr ""
+msgstr "Sdílet se všemi uživateli"
#. module: web
#. openerp-web
@@ -3306,20 +3345,20 @@ msgstr ""
#: code:addons/web/static/src/js/fields/signature.js:0
#, python-format
msgid "Signature"
-msgstr ""
+msgstr "Podpis"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Size:"
-msgstr ""
+msgstr "Velikost:"
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "Something horrible happened"
-msgstr ""
+msgstr "Stalo se něco hrozného"
#. module: web
#. openerp-web
@@ -3333,7 +3372,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Special:"
-msgstr ""
+msgstr "Speciální:"
#. module: web
#. openerp-web
@@ -3347,14 +3386,14 @@ msgstr ""
#: code:addons/web/static/src/js/core/misc.js:0
#, python-format
msgid "Still loading..."
-msgstr ""
+msgstr "Načítání stále probíhá..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/misc.js:0
#, python-format
msgid "Still loading...<br />Please be patient."
-msgstr ""
+msgstr "Načítání stále probíhá...<br />Prosím čekejte."
#. module: web
#. openerp-web
@@ -3376,62 +3415,62 @@ msgstr "styly"
#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
#, python-format
msgid "Summary"
-msgstr ""
+msgstr "Shrnutí"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Summary:"
-msgstr ""
+msgstr "Shrnutí:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Support"
-msgstr ""
+msgstr "Podpora"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "Syntax error"
-msgstr ""
+msgstr "Chyba syntaxe"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Tags"
-msgstr ""
+msgstr "Štítky"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/misc.js:0
#, python-format
msgid "Take a minute to get a coffee,<br />because it's loading..."
-msgstr ""
+msgstr "Běžte si udělat kafe<br />protože probíhá načítání..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Tap on the list to change company"
-msgstr ""
+msgstr "Klepněte na seznam a změňte společnost"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Technical Translation"
-msgstr ""
+msgstr "Technický překlad"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
#: model_terms:ir.ui.view,arch_db:web.external_layout_clean
msgid "Tel:"
-msgstr ""
+msgstr "Tel:"
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -3451,7 +3490,7 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Text"
-msgstr ""
+msgstr "Text"
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -3467,7 +3506,7 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "The domain you entered is not properly formed"
-msgstr ""
+msgstr "Zadaná doména není správně vytvořena"
#. module: web
#. openerp-web
@@ -3477,13 +3516,15 @@ msgid ""
"The field chain is not valid. Did you maybe use a non-existing field name or"
" followed a non-relational field?"
msgstr ""
+"Řetězec pole není platný. Možná jste použili neexistující název pole nebo "
+"sledovali nerelační pole?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "The field is empty, there's nothing to save !"
-msgstr ""
+msgstr "Pole je prázdné, není co ukládat!"
#. module: web
#. openerp-web
@@ -3498,13 +3539,13 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/attach_document.js:0
#, python-format
msgid "The following fields are invalid:"
-msgstr ""
+msgstr "Následující pole jsou neplatná:"
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "The new password and its confirmation must be identical."
-msgstr ""
+msgstr "Nové heslo a jeho potvrzení musí být stejné."
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -3512,6 +3553,7 @@ msgstr ""
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
+"Staré heslo, které jste zadali, je neplatné. Vaše heslo nebylo změněno."
#. module: web
#. openerp-web
@@ -3521,6 +3563,8 @@ msgid ""
"The operation was interrupted. This usually means that the current operation"
" is taking too much time."
msgstr ""
+"Operace byla přerušena. To obvykle znamená, že aktuální operace trvá příliš "
+"mnoho času."
#. module: web
#. openerp-web
@@ -3536,7 +3580,7 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "The selected file exceed the maximum file size of %s."
-msgstr ""
+msgstr "Zvolený soubor překračuje maximální velikost %s."
#. module: web
#. openerp-web
@@ -3545,7 +3589,7 @@ msgstr ""
msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
-msgstr ""
+msgstr "Typ pole '%s' musí být many2many s relací k modelu 'ir.attachment'."
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -3560,42 +3604,42 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "There is no available image to be set as cover."
-msgstr ""
+msgstr "Není k dispozici žádný obrázek, který má být nastaven jako úvodní."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "There was a problem while uploading your file"
-msgstr ""
+msgstr "Při nahrávání vašeho souboru nastal problém"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "This Month"
-msgstr ""
+msgstr "Tento měsíc"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "This Quarter"
-msgstr ""
+msgstr "Toto čtvrtletí"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "This Week"
-msgstr ""
+msgstr "Tento týden"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "This Year"
-msgstr ""
+msgstr "Tento rok"
#. module: web
#. openerp-web
@@ -3603,13 +3647,14 @@ msgstr ""
#, python-format
msgid "This date is on the future. Make sure it is what you expected."
msgstr ""
+"Toto datum je o budoucnosti. Ujistěte se, že je takové, jaké jste očekávali."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "This domain is not supported."
-msgstr ""
+msgstr "Tato doména není podporována."
#. module: web
#. openerp-web
@@ -3625,11 +3670,13 @@ msgstr ""
msgid ""
"This filter is global and will be removed for everybody if you continue."
msgstr ""
+"Tento filtr je globální, a pokud budete pokračovat, bude odebrán všem "
+"uživatelům."
#. module: web
#: model_terms:ir.ui.view,arch_db:web.preview_externalreport
msgid "This is a sample of an external report."
-msgstr ""
+msgstr "Jedná se o vzorek externí zprávy."
#. module: web
#: model_terms:ir.ui.view,arch_db:web.preview_internalreport
@@ -3641,14 +3688,14 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Time"
-msgstr ""
+msgstr "Čas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Time Ranges"
-msgstr ""
+msgstr "Časové rozsahy"
#. module: web
#. openerp-web
@@ -3666,14 +3713,14 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Today"
-msgstr ""
+msgstr "Dnes"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Toggle"
-msgstr ""
+msgstr "Přepnout"
#. module: web
#. openerp-web
@@ -3689,7 +3736,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/pivot/pivot_model.js:0
#, python-format
msgid "Total"
-msgstr ""
+msgstr "Celkem"
#. module: web
#. openerp-web
@@ -3701,10 +3748,17 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
-msgstr ""
+msgstr "Pravda"
#. module: web
#. openerp-web
@@ -3729,21 +3783,21 @@ msgstr ""
#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
#, python-format
msgid "Trying to reconnect..."
-msgstr ""
+msgstr "Pokus o opětovné připojení ..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Type:"
-msgstr ""
+msgstr "Typ:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "URL"
-msgstr ""
+msgstr "URL"
#. module: web
#. openerp-web
@@ -3766,7 +3820,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Unarchive All"
-msgstr ""
+msgstr "Vyarchivovat vše"
#. module: web
#. openerp-web
@@ -3781,70 +3835,70 @@ msgstr ""
#: code:addons/web/static/src/js/views/pivot/pivot_model.js:0
#, python-format
msgid "Undefined"
-msgstr ""
+msgstr "Nedefinováno"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Unfold"
-msgstr ""
+msgstr "Rozbalit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Unknown CORS error"
-msgstr ""
+msgstr "Neznámá chyba CORS"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/py_utils.js:0
#, python-format
msgid "Unknown nonliteral type "
-msgstr ""
+msgstr "Neznámý typ nonliterálu "
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
#, python-format
msgid "Unlink row "
-msgstr ""
+msgstr "Odpojit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/_deprecated/data.js:0
#, python-format
msgid "Unnamed"
-msgstr ""
+msgstr "Nepojmenovaný"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/pivot/pivot_view.js:0
#, python-format
msgid "Untitled"
-msgstr ""
+msgstr "Bez názvu"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/upgrade_fields.js:0
#, python-format
msgid "Upgrade now"
-msgstr ""
+msgstr "Upgradovat"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Upgrade to enterprise"
-msgstr ""
+msgstr "Upgrade na enterprise"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Upgrade to future versions"
-msgstr ""
+msgstr "Upgrade na budoucí verze"
#. module: web
#. openerp-web
@@ -3859,28 +3913,28 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Upload your file"
-msgstr ""
+msgstr "Nahrajte soubor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Uploaded"
-msgstr ""
+msgstr "Nahráno"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Uploading"
-msgstr ""
+msgstr "Nahrávání"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Uploading Error"
-msgstr ""
+msgstr "Chyba nahrávání"
#. module: web
#. openerp-web
@@ -3889,14 +3943,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Uploading..."
-msgstr ""
+msgstr "Nahrávání..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Use by default"
-msgstr ""
+msgstr "Použít ve výchozím stavu"
#. module: web
#. openerp-web
@@ -3910,14 +3964,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Users"
-msgstr ""
+msgstr "Uživatelé"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Validation Error"
-msgstr ""
+msgstr "Chyba ověření"
#. module: web
#. openerp-web
@@ -3932,19 +3986,19 @@ msgstr ""
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "View Fields"
-msgstr ""
+msgstr "Pole zobrazení"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "View Metadata"
-msgstr ""
+msgstr "Zobrazit metadata"
#. module: web
#: model:ir.model.fields,field_description:web.field_ir_actions_act_window_view__view_mode
msgid "View Type"
-msgstr ""
+msgstr "Typ zobrazení"
#. module: web
#. openerp-web
@@ -3953,29 +4007,30 @@ msgstr ""
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Warning"
-msgstr ""
+msgstr "Varování"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/attach_document.js:0
#, python-format
msgid "Warning : You have to save first before attaching a file."
-msgstr ""
+msgstr "Varování: Před připojením souboru musíte nejprve uložit."
#. module: web
#: model_terms:ir.ui.view,arch_db:web.benchmark_suite
msgid "Web Benchmarks"
-msgstr ""
+msgstr "Webové benchmarky"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.qunit_mobile_suite
msgid "Web Mobile Tests"
-msgstr ""
+msgstr "Testy webu pro mobilní zařízení"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.qunit_suite
@@ -3986,7 +4041,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
msgid "Web:"
-msgstr ""
+msgstr "Web:"
#. module: web
#. openerp-web
@@ -3996,48 +4051,48 @@ msgstr ""
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Week"
-msgstr ""
+msgstr "Týden"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/rainbow_man.js:0
#, python-format
msgid "Well Done!"
-msgstr ""
+msgstr "Velmi dobře!"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Widget:"
-msgstr ""
+msgstr "Widget:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/menu.xml:0
#, python-format
msgid "Windows/Linux"
-msgstr ""
+msgstr "Windows/Linux"
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "Wrong login/password"
-msgstr ""
+msgstr "Špatný login / heslo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Wrong value entered!"
-msgstr ""
+msgstr "Zadali jste špatnou hodnotu!"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "XML ID:"
-msgstr ""
+msgstr "XML ID:"
#. module: web
#. openerp-web
@@ -4045,7 +4100,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Year"
-msgstr ""
+msgstr "Rok"
#. module: web
#. openerp-web
@@ -4054,7 +4109,7 @@ msgstr ""
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Yellow"
-msgstr ""
+msgstr "Žlutý"
#. module: web
#. openerp-web
@@ -4062,41 +4117,41 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Yes"
-msgstr ""
+msgstr "Ano"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Yesterday"
-msgstr ""
+msgstr "Včera"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
#, python-format
msgid "You are back online"
-msgstr ""
+msgstr "Jste zpět online"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "You are creating a new %s, are you sure it does not exist yet?"
-msgstr ""
+msgstr "Vytváříte nový %s, jste si jisti, že ještě neexistuje?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/model_field_selector.js:0
#, python-format
msgid "You cannot follow relations for this field chain construction"
-msgstr ""
+msgstr "Pro tuto konstrukci řetězového pole nemůžete sledovat vztahy"
#. module: web
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "You cannot leave any password empty."
-msgstr ""
+msgstr "Všechna hesla musí být vyplněná."
#. module: web
#. openerp-web
@@ -4104,6 +4159,15 @@ msgstr ""
#, python-format
msgid ""
"You may not believe it,<br />but the application is actually loading..."
+msgstr "Možná tomu nebudete věřit<br />ale aplikace se stále načítá..."
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
msgstr ""
#. module: web
@@ -4114,6 +4178,8 @@ msgid ""
"You need to start Odoo with at least two workers to print a pdf version of "
"the reports."
msgstr ""
+"Potřebujete spustit Odoo s nejméně dvěma pracovníky, abyste mohli vytisknout"
+" pdf verzi zpráv."
#. module: web
#. openerp-web
@@ -4124,13 +4190,16 @@ msgid ""
"to get a correct display of headers and footers as well as support for "
"table-breaking between pages."
msgstr ""
+"Měli byste upgradovat svou verzi Wkhtmltopdf na alespoň 0.12.0, abyste "
+"získali správné zobrazení záhlaví a zápatí, stejně jako podporu pro "
+"rozdělení tabulek mezi stránkami."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Your Odoo session expired. Please refresh the current web page."
-msgstr ""
+msgstr "Vaše sezení Odoo vypršelo. Prosím, obnovte aktuální webovou stránku."
#. module: web
#. openerp-web
@@ -4170,49 +4239,49 @@ msgstr ""
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "a day ago"
-msgstr ""
+msgstr "včera"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "about a minute ago"
-msgstr ""
+msgstr "asi před minutou"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "about a month ago"
-msgstr ""
+msgstr "asi před měsícem"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "about a year ago"
-msgstr ""
+msgstr "asi před rokem"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "about an hour ago"
-msgstr ""
+msgstr "asi před hodinou"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "all records"
-msgstr ""
+msgstr "všechny záznamy"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "child of"
-msgstr ""
+msgstr "podřízený"
#. module: web
#. openerp-web
@@ -4220,21 +4289,21 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "contains"
-msgstr ""
+msgstr "obsahuje"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "does not contain"
-msgstr ""
+msgstr "neobsahuje"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "doesn't contain"
-msgstr ""
+msgstr "neobsahuje"
#. module: web
#. openerp-web
@@ -4242,7 +4311,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "greater than"
-msgstr ""
+msgstr "větší než"
#. module: web
#. openerp-web
@@ -4250,14 +4319,14 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "greater than or equal to"
-msgstr ""
+msgstr "větší nebo rovno"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "in"
-msgstr ""
+msgstr "v "
#. module: web
#. openerp-web
@@ -4267,14 +4336,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "is"
-msgstr ""
+msgstr "je"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "is after"
-msgstr ""
+msgstr "je po"
#. module: web
#. openerp-web
@@ -4302,7 +4371,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "is between"
-msgstr ""
+msgstr "je mezi"
#. module: web
#. openerp-web
@@ -4312,14 +4381,14 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "is equal to"
-msgstr ""
+msgstr "rovná se"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "is false"
-msgstr ""
+msgstr "je nepravda"
#. module: web
#. openerp-web
@@ -4327,14 +4396,14 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "is not"
-msgstr ""
+msgstr "není"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "is not ="
-msgstr ""
+msgstr "není ="
#. module: web
#. openerp-web
@@ -4344,7 +4413,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "is not equal to"
-msgstr ""
+msgstr "nerovná se"
#. module: web
#. openerp-web
@@ -4356,7 +4425,7 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "is not set"
-msgstr ""
+msgstr "není nastaveno"
#. module: web
#. openerp-web
@@ -4368,21 +4437,21 @@ msgstr ""
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "is set"
-msgstr ""
+msgstr "je nastaveno"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "is true"
-msgstr ""
+msgstr "je pravda"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/utils.js:0
#, python-format
msgid "kMGTPE"
-msgstr ""
+msgstr "kMGTPE"
#. module: web
#. openerp-web
@@ -4390,14 +4459,14 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "less than"
-msgstr ""
+msgstr "menší než"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/core/translation.js:0
#, python-format
msgid "less than a minute ago"
-msgstr ""
+msgstr "méně než před minutou"
#. module: web
#. openerp-web
@@ -4405,7 +4474,7 @@ msgstr ""
#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
#, python-format
msgid "less than or equal to"
-msgstr ""
+msgstr "menší nebo rovno"
#. module: web
#. openerp-web
@@ -4419,14 +4488,14 @@ msgstr "není"
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "not a valid integer"
-msgstr ""
+msgstr "neplatné celé číslo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
#, python-format
msgid "not a valid number"
-msgstr ""
+msgstr "neplatné číslo"
#. module: web
#. openerp-web
@@ -4440,21 +4509,21 @@ msgstr "není v"
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "not set (false)"
-msgstr ""
+msgstr "není nastaveno (false)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "of the following rules:"
-msgstr ""
+msgstr "následujících pravidel:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "of:"
-msgstr ""
+msgstr "z:"
#. module: web
#. openerp-web
@@ -4464,14 +4533,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "or"
-msgstr ""
+msgstr "nebo"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "parent of"
-msgstr ""
+msgstr "nadřízený "
#. module: web
#: model_terms:ir.ui.view,arch_db:web.brand_promotion
@@ -4483,25 +4552,25 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "record(s)"
-msgstr ""
+msgstr "záznam(y)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "remaining)"
-msgstr ""
+msgstr "zbývajících)"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "set"
-msgstr ""
+msgstr "nastavit"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/widgets/domain_selector.js:0
#, python-format
msgid "set (true)"
-msgstr ""
+msgstr "nastavit (true)"
diff --git a/addons/web/i18n/de.po b/addons/web/i18n/de.po
index 9a1f61042e5..b3f0900a772 100644
--- a/addons/web/i18n/de.po
+++ b/addons/web/i18n/de.po
@@ -28,16 +28,16 @@
# Leon Grill <leg@odoo.com>, 2019
# Anja Uebermuth <anja.uebermuth@arts.eu>, 2019
# e2f <projects@e2f.com>, 2019
-# Martin Trigaux, 2019
# Chris Egal <sodaswed@web.de>, 2019
+# Martin Trigaux, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Chris Egal <sodaswed@web.de>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: German (https://www.transifex.com/odoo/teams/41243/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1294,6 +1294,7 @@ msgstr "Beschreibung"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2670,6 +2671,13 @@ msgstr "Orange"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Andere"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3119,6 +3127,7 @@ msgstr "Sättigung%"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3777,6 +3786,13 @@ msgstr "Zurückverfolgung"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4029,6 +4045,7 @@ msgstr "Ansichtstyp"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4189,6 +4206,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/es.po b/addons/web/i18n/es.po
index c3aaadeac2b..602eb01e628 100644
--- a/addons/web/i18n/es.po
+++ b/addons/web/i18n/es.po
@@ -37,17 +37,20 @@
# Nicolás Broggi <rnbroggi@gmail.com>, 2019
# Edilianny Sánchez <esanchez@vauxoo.com>, 2019
# Jesse Garza <jga@odoo.com>, 2019
-# Martin Trigaux, 2019
# 966ff43e6966712895a590e7320ca288, 2019
# Efrem Jimenez <efj@odoo.com>, 2019
+# Florimond Husquinet <fhu@odoo.com>, 2019
+# Martin Trigaux, 2019
+# Jon Perez <jop@odoo.com>, 2019
+# John Guardado <jgu@odoo.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Efrem Jimenez <efj@odoo.com>, 2019\n"
+"Last-Translator: John Guardado <jgu@odoo.com>, 2019\n"
"Language-Team: Spanish (https://www.transifex.com/odoo/teams/41243/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -353,7 +356,7 @@ msgstr "Acción ID:"
#. module: web
#: model:ir.model,name:web.model_ir_actions_act_window_view
msgid "Action Window View"
-msgstr ""
+msgstr "Vista de la ventana de acciones"
#. module: web
#. openerp-web
@@ -737,7 +740,7 @@ msgstr "Basado en"
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Become Superuser"
-msgstr ""
+msgstr "Conviértete en superusuario"
#. module: web
#: code:addons/web/controllers/main.py:0
@@ -807,7 +810,7 @@ msgstr ""
#: code:addons/web/static/src/js/core/utils.js:0
#, python-format
msgid "Bytes|Kb|Mb|Gb|Tb|Pb|Eb|Zb|Yb"
-msgstr ""
+msgstr "Bytes|Kb|Mb|Gb|Tb|Pb|Eb|Zb|Yb"
#. module: web
#. openerp-web
@@ -1246,7 +1249,7 @@ msgstr ""
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Decimal"
-msgstr ""
+msgstr "Decimal"
#. module: web
#. openerp-web
@@ -1302,6 +1305,7 @@ msgstr "Descripción"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -1335,7 +1339,7 @@ msgstr "¿Desea borrar realmente este filtro de los favoritos?"
#: code:addons/web/static/src/js/views/list/list_controller.js:0
#, python-format
msgid "Do you want to set the value on the %d selected records?"
-msgstr ""
+msgstr "¿Desea establecer el valor en los %d registros seleccionados?"
#. module: web
#. openerp-web
@@ -1344,6 +1348,8 @@ msgstr ""
msgid ""
"Do you want to set the value on the %d valid selected records? (%d invalid)"
msgstr ""
+"¿Desea establecer el valor en los %d registros seleccionados válidos? (%d "
+"inválido)"
#. module: web
#. openerp-web
@@ -1504,7 +1510,7 @@ msgstr "¡Error, contraseña no modificada!"
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "Esc to discard"
-msgstr ""
+msgstr "Esc para descartar"
#. module: web
#. openerp-web
@@ -1547,7 +1553,7 @@ msgstr "Exportar información"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Export Format:"
-msgstr ""
+msgstr "Formato de exportación:"
#. module: web
#. openerp-web
@@ -1796,7 +1802,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Hit DOWN to navigate to the list below"
-msgstr ""
+msgstr "Presiona ABAJO para navegar a la lista a continuación"
#. module: web
#. openerp-web
@@ -1845,7 +1851,7 @@ msgstr "Estoy seguro de esto."
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "I want to update data (import-compatible export)"
-msgstr ""
+msgstr "Quiero actualizar datos (exportación compatible con importación)"
#. module: web
#. openerp-web
@@ -1970,7 +1976,7 @@ msgstr "Últimos 365 días"
#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
#, python-format
msgid "Last 5 Years"
-msgstr ""
+msgstr "Últimos 5 años"
#. module: web
#. openerp-web
@@ -2112,7 +2118,7 @@ msgstr "Iniciar Sesión"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
msgid "Log in as superuser"
-msgstr ""
+msgstr "Inicie sesión como superusuario"
#. module: web
#. openerp-web
@@ -2149,7 +2155,7 @@ msgstr "Correo:"
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Manage Attachments"
-msgstr ""
+msgstr "Administrar archivos adjuntos"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login_layout
@@ -2354,7 +2360,7 @@ msgstr "Nuevo diseño"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "New template"
-msgstr ""
+msgstr "Nueva plantilla"
#. module: web
#. openerp-web
@@ -2398,7 +2404,7 @@ msgstr "Sin color"
#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
#, python-format
msgid "No data"
-msgstr ""
+msgstr "Sin datos"
#. module: web
#. openerp-web
@@ -2412,7 +2418,7 @@ msgstr "Sin datos que mostrar"
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "No match found."
-msgstr ""
+msgstr "No se encontraron coincidencias."
#. module: web
#. openerp-web
@@ -2433,7 +2439,7 @@ msgstr "No hay registros"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#, python-format
msgid "No records found!"
-msgstr ""
+msgstr "¡No se encontrarón archivos!"
#. module: web
#. openerp-web
@@ -2447,13 +2453,15 @@ msgstr "Sin resultados que mostrar..."
#, python-format
msgid "No template found to inherit from. Module %s and template name %s"
msgstr ""
+"No se encontró ninguna plantilla para heredar. Nombre de módulo %s y "
+"plantilla %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views/list/list_controller.js:0
#, python-format
msgid "No valid record to save"
-msgstr ""
+msgstr "No hay registro válido para guardar"
#. module: web
#. openerp-web
@@ -2467,7 +2475,7 @@ msgstr "Ninguno"
#: code:addons/web/models/models.py:0
#, python-format
msgid "Not Set"
-msgstr ""
+msgstr "No establecido"
#. module: web
#. openerp-web
@@ -2599,6 +2607,8 @@ msgid ""
"Only types %(supported_types)s are supported for category (found type "
"%(field_type)s)"
msgstr ""
+"Solo los tipos %(supported_types)s son compatibles para la categoría (tipo "
+"encontrado %(field_type)s)"
#. module: web
#: code:addons/web/models/models.py:0
@@ -2607,6 +2617,8 @@ msgid ""
"Only types %(supported_types)s are supported for filter (found type "
"%(field_type)s)"
msgstr ""
+"Solo los tipos %(supported_types)s son compatibles con el filtro (tipo "
+"encontrado %(field_type)s)"
#. module: web
#. openerp-web
@@ -2679,6 +2691,13 @@ msgstr "Naranja"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Otro"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -2701,7 +2720,7 @@ msgstr ""
#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
msgid "Page: <span class=\"page\"/> / <span class=\"topage\"/>"
-msgstr "Página: <span class=\"page\"/>/<span class=\"topage\"/>"
+msgstr "Página: <span class=\"page\"/> / <span class=\"topage\"/>"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login
@@ -2827,7 +2846,7 @@ msgstr ""
#. module: web
#: model_terms:ir.ui.view,arch_db:web.brand_promotion_message
msgid "Powered by %s%s"
-msgstr ""
+msgstr "Con tecnología de %s%s"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.login_layout
@@ -2894,7 +2913,7 @@ msgstr "Prioridad"
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "Progress Bar"
-msgstr ""
+msgstr "Barra de progreso"
#. module: web
#. openerp-web
@@ -2958,7 +2977,7 @@ msgstr ""
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#, python-format
msgid "Quick search: %s"
-msgstr ""
+msgstr "Búsqueda rápida: %s"
#. module: web
#: model:ir.model,name:web.model_ir_qweb_field_image
@@ -3037,7 +3056,7 @@ msgstr "Eliminar imagen en portada"
#: code:addons/web/static/src/js/widgets/data_export.js:0
#, python-format
msgid "Remove field"
-msgstr ""
+msgstr "Eliminar campo"
#. module: web
#. openerp-web
@@ -3129,6 +3148,7 @@ msgstr "Saturación %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3162,7 +3182,7 @@ msgstr "Guardar como..."
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Save Current Search"
-msgstr ""
+msgstr "Guardar búsqueda actual"
#. module: web
#. openerp-web
@@ -3176,7 +3196,7 @@ msgstr "Guarde un registro"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Save as :"
-msgstr ""
+msgstr "Guardar como :"
#. module: web
#. openerp-web
@@ -3241,7 +3261,7 @@ msgstr "Ver detalles"
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "See examples"
-msgstr ""
+msgstr "Ver ejemplos"
#. module: web
#. openerp-web
@@ -3290,7 +3310,7 @@ msgstr "Escoge una vista"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Select field"
-msgstr ""
+msgstr "Seleccionar campo"
#. module: web
#. openerp-web
@@ -3339,7 +3359,7 @@ msgstr "Establecer una imagen de portada"
#: code:addons/web/static/src/js/fields/special_fields.js:0
#, python-format
msgid "Set a timezone on your user"
-msgstr ""
+msgstr "Establezca una zona horaria en su usuario"
#. module: web
#. openerp-web
@@ -3367,7 +3387,7 @@ msgstr "Atajo"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Show sub-fields"
-msgstr ""
+msgstr "Mostrar subcampos"
#. module: web
#. openerp-web
@@ -3401,7 +3421,7 @@ msgstr "Ha ocurrido algo horrible"
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "Something went wrong !"
-msgstr ""
+msgstr "¡Algo salió mal!"
#. module: web
#. openerp-web
@@ -3512,14 +3532,14 @@ msgstr "Tel.:"
#: code:addons/web/controllers/main.py:0
#, python-format
msgid "Template %s already exists in module %s"
-msgstr ""
+msgstr "La plantilla %s ya existe en el módulo %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Template:"
-msgstr ""
+msgstr "Plantilla: "
#. module: web
#. openerp-web
@@ -3535,6 +3555,8 @@ msgid ""
"The content of this cell is too long for an XLSX file (more than %s "
"characters). Please use the CSV format for this export."
msgstr ""
+"El contenido de esta celda es demasiado largo para un archivo XLSX (más que "
+"%s caracteres). Utilice el formato CSV para esta exportación."
#. module: web
#. openerp-web
@@ -3567,7 +3589,7 @@ msgstr "Este campo está vacío, ¡no hay nada que guardar!"
#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
#, python-format
msgid "The following field is invalid:"
-msgstr ""
+msgstr "El siguiente campo no es válido:"
#. module: web
#. openerp-web
@@ -3639,13 +3661,15 @@ msgid ""
"There are too many rows (%s rows, limit: %s) to export as Excel 2007-2013 "
"(.xlsx) format. Consider splitting the export."
msgstr ""
+"Hay demasiadas filas (%sfilas, límite:%s) para exportar en formato Excel "
+"2007-2013 (.xlsx). Considere dividir la exportación."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/kanban.xml:0
#, python-format
msgid "There is no available image to be set as cover."
-msgstr ""
+msgstr "No hay imagen disponible para establecer como portada."
#. module: web
#. openerp-web
@@ -3701,7 +3725,7 @@ msgstr "Este dominio no es compatible."
#: code:addons/web/static/src/xml/name_and_signature.xml:0
#, python-format
msgid "This file is invalid. Please select an image."
-msgstr ""
+msgstr "Este archivo no es válido Por favor seleccione una imagen."
#. module: web
#. openerp-web
@@ -3744,6 +3768,8 @@ msgid ""
"Timezone Mismatch : This timezone is different from that of your browser.\n"
"Please, set the same timezone as your browser's to avoid time discrepancies in your system."
msgstr ""
+"No coinciden las zonas horarias: esta zona horaria es diferente a la de su navegador.\n"
+"Establezca la misma zona horaria que su navegador para evitar discrepancias de tiempo en su sistema."
#. module: web
#. openerp-web
@@ -3787,6 +3813,13 @@ msgstr "Rastreo de error:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3800,6 +3833,8 @@ msgid ""
"Try to add some records, or make sure that there is at least one measure and"
" no active filter in the search bar."
msgstr ""
+"Intente agregar algunos registros o asegúrese de que haya al menos una "
+"medida y ningún filtro activo en la barra de búsqueda."
#. module: web
#. openerp-web
@@ -3809,6 +3844,8 @@ msgid ""
"Try to add some records, or make sure that there is no\n"
" active filter in the search bar."
msgstr ""
+"Intente agregar algunos registros o asegúrese de que no haya ningún filtro\n"
+" activo en la barra de búsqueda."
#. module: web
#. openerp-web
@@ -3838,6 +3875,8 @@ msgstr "URL"
msgid ""
"Unable to find Wkhtmltopdf on this system. The report will be shown in html."
msgstr ""
+"Imposible encontrar Wkhtmltopdf en el sistema. El informe será mostrado en "
+"HTML."
#. module: web
#. openerp-web
@@ -3923,7 +3962,7 @@ msgstr "Actualizar ahora"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Upgrade to enterprise"
-msgstr ""
+msgstr "Actualizar a Enterprise"
#. module: web
#. openerp-web
@@ -3989,7 +4028,7 @@ msgstr "Usar por defecto"
#: code:addons/web/static/src/js/services/crash_manager.js:0
#, python-format
msgid "User Error"
-msgstr ""
+msgstr "Error de usuario"
#. module: web
#. openerp-web
@@ -4039,6 +4078,7 @@ msgstr "Tipo de vista"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4196,6 +4236,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/fr.po b/addons/web/i18n/fr.po
index 7a7fd5f39b1..61f665ec291 100644
--- a/addons/web/i18n/fr.po
+++ b/addons/web/i18n/fr.po
@@ -27,16 +27,16 @@
# Olivier ANDRE <frsw194@gmail.com>, 2019
# Doryan R, 2019
# fah_odoo <fah@odoo.com>, 2019
-# Martin Trigaux, 2019
# Xavier Belmere <Info@cartmeleon.com>, 2019
# Eloïse Stilmant <est@odoo.com>, 2019
+# Martin Trigaux, 2019
# Cécile Collart <cco@odoo.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
"Last-Translator: Cécile Collart <cco@odoo.com>, 2019\n"
"Language-Team: French (https://www.transifex.com/odoo/teams/41243/fr/)\n"
@@ -1296,6 +1296,7 @@ msgstr "Description"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2674,6 +2675,13 @@ msgstr "Orange"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Autre"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -2957,7 +2965,7 @@ msgstr "Recherche rapide: %s"
#. module: web
#: model:ir.model,name:web.model_ir_qweb_field_image
msgid "Qweb Field Image"
-msgstr ""
+msgstr "Champ Qweb image"
#. module: web
#. openerp-web
@@ -3123,6 +3131,7 @@ msgstr "Saturation %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3156,7 +3165,7 @@ msgstr "Enregistrer sous…"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Save Current Search"
-msgstr ""
+msgstr "Sauver la recherche en cours"
#. module: web
#. openerp-web
@@ -3785,6 +3794,13 @@ msgstr "Retraçage :"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3798,6 +3814,8 @@ msgid ""
"Try to add some records, or make sure that there is at least one measure and"
" no active filter in the search bar."
msgstr ""
+"Essayez d'ajouter des enregistrements ou assurez-vous qu'il existe au moins "
+"une mesure et aucun filtre actif dans la barre de recherche."
#. module: web
#. openerp-web
@@ -3807,6 +3825,8 @@ msgid ""
"Try to add some records, or make sure that there is no\n"
" active filter in the search bar."
msgstr ""
+"Essayez d'ajouter des enregistrements ou assurez-vous qu'il n'existe \n"
+"aucun filtre actif dans la barre de recherche."
#. module: web
#. openerp-web
@@ -4038,6 +4058,7 @@ msgstr "Type de Vue"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4199,6 +4220,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
@@ -4574,7 +4604,7 @@ msgstr "parent de"
#. module: web
#: model_terms:ir.ui.view,arch_db:web.brand_promotion
msgid "portal"
-msgstr ""
+msgstr "portail"
#. module: web
#. openerp-web
diff --git a/addons/web/i18n/hr.po b/addons/web/i18n/hr.po
index cc51301e36b..ce3d85fb730 100644
--- a/addons/web/i18n/hr.po
+++ b/addons/web/i18n/hr.po
@@ -9,18 +9,18 @@
# Đurđica Žarković <durdica.zarkovic@storm.hr>, 2019
# Jasmina Otročak <jasmina@uvid.hr>, 2019
# Mario Jureša <mario.juresa@uvid.hr>, 2019
-# Tina Milas, 2019
# Bole <bole@dajmi5.com>, 2019
# Ivica Dimjašević <ivica.dimjasevic@storm.hr>, 2019
# Karolina Tonković <karolina.tonkovic@storm.hr>, 2019
+# Tina Milas, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Karolina Tonković <karolina.tonkovic@storm.hr>, 2019\n"
+"Last-Translator: Tina Milas, 2019\n"
"Language-Team: Croatian (https://www.transifex.com/odoo/teams/41243/hr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1261,6 +1261,7 @@ msgstr "Opis"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2630,6 +2631,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Ostalo"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3073,6 +3081,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3721,6 +3730,13 @@ msgstr "Povijest:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3973,6 +3989,7 @@ msgstr "Tip pogleda"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4128,6 +4145,15 @@ msgstr "Nevjerovatno,<br />aplikacija se učitava..."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/hu.po b/addons/web/i18n/hu.po
index 5a7f9b9edf5..e315c840607 100644
--- a/addons/web/i18n/hu.po
+++ b/addons/web/i18n/hu.po
@@ -8,16 +8,16 @@
# Martin Trigaux, 2019
# Kovács Tibor <kovika@gmail.com>, 2019
# Ákos Nagy <akos.nagy@oregional.hu>, 2019
-# krnkris, 2019
# gezza <geza.nagy@oregional.hu>, 2019
+# krnkris, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: gezza <geza.nagy@oregional.hu>, 2019\n"
+"Last-Translator: krnkris, 2019\n"
"Language-Team: Hungarian (https://www.transifex.com/odoo/teams/41243/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1257,6 +1257,7 @@ msgstr "Leírás"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2633,6 +2634,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Egyéb"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3076,6 +3084,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3723,6 +3732,13 @@ msgstr "Visszakövetés:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3975,6 +3991,7 @@ msgstr "Nézet típusa"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4130,6 +4147,15 @@ msgstr "Nem fogja elhinni,<br />de az alkalmazás tényleg töltődik..."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/it.po b/addons/web/i18n/it.po
index 4a5a53a6165..68252cbdbb8 100644
--- a/addons/web/i18n/it.po
+++ b/addons/web/i18n/it.po
@@ -17,14 +17,15 @@
# Giacomo Grasso <giacomo.grasso.82@gmail.com>, 2019
# Paolo Valier, 2019
# Sergio Zanchetta <primes2h@gmail.com>, 2019
+# Luigi Di Naro <gigidn@gmail.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Sergio Zanchetta <primes2h@gmail.com>, 2019\n"
+"Last-Translator: Luigi Di Naro <gigidn@gmail.com>, 2019\n"
"Language-Team: Italian (https://www.transifex.com/odoo/teams/41243/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1277,6 +1278,7 @@ msgstr "Descrizione"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2659,6 +2661,13 @@ msgstr "Arancione"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Altro"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3107,6 +3116,7 @@ msgstr "Saturazione %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3760,6 +3770,13 @@ msgstr "Traceback:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4018,6 +4035,7 @@ msgstr "Tipo vista"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4174,6 +4192,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/lb.po b/addons/web/i18n/lb.po
new file mode 100644
index 00000000000..2101af48bce
--- /dev/null
+++ b/addons/web/i18n/lb.po
@@ -0,0 +1,4529 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * web
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server saas~12.5\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
+"PO-Revision-Date: 2019-08-26 09:15+0000\n"
+"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Language: lb\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
+#, python-format
+msgid " [Me]"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid " and "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_facet.js:0
+#, python-format
+msgid " or "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid " records"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "# Code editor"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "%(field)s %(operator)s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "%(field)s %(operator)s \"%(value)s\""
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "%d days ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "%d hours ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "%d minutes ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "%d months ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "%d years ago"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.webclient_bootstrap
+msgid ""
+"&lt;!--[if lt IE 10]&gt;\n"
+" &lt;body class=\"ie9\"&gt;\n"
+" &lt;![endif]--&gt;"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/notification.xml:0
+#, python-format
+msgid "&times;"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "'%s' is not a correct date"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/time.js:0
+#, python-format
+msgid "'%s' is not a correct date, datetime nor time"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "'%s' is not a correct datetime"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "'%s' is not a correct float"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "'%s' is not a correct integer"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "'%s' is not a correct monetary field"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/time.js:0
+#, python-format
+msgid "'%s' is not convertible to date, datetime nor time"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "(change)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "(count)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "(no string)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "(nolabel)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "1 record"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_background
+msgid "<i class=\"fa fa-at\" role=\"img\" aria-label=\"Email\" title=\"Email\"/>"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_background
+msgid "<i class=\"fa fa-building-o\" role=\"img\" aria-label=\"Fiscal number\"/>"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_background
+msgid "<i class=\"fa fa-globe\" role=\"img\" aria-label=\"Website\" title=\"Website\"/>"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_background
+msgid "<i class=\"fa fa-phone\" role=\"img\" aria-label=\"Phone\" title=\"Phone\"/>"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.frontend_layout
+msgid "<span>Copyright &amp;copy;</span>"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:0
+#, python-format
+msgid "A name for your favorite is required."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager.js:0
+#, python-format
+msgid ""
+"A popup window has been blocked. You may need to change your browser "
+"settings to allow popup windows for this page."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#, python-format
+msgid ""
+"A popup window with your report was blocked. You may need to change your "
+"browser settings to allow popup windows for this page."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "ALL"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "ANY"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Access Denied"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Access Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Access to all Enterprise Apps"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/sidebar.js:0
+#, python-format
+msgid "Action"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Action ID:"
+msgstr ""
+
+#. module: web
+#: model:ir.model,name:web.model_ir_actions_act_window_view
+msgid "Action Window View"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Activate Assets Debugging"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Activate Tests Assets Debugging"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Add"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:0
+#, python-format
+msgid "Add %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add Custom Filter"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add Custom Group"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Add a Column"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add a condition"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
+#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
+#, python-format
+msgid "Add a line"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add branch"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Add column"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add filter"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add new value"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add node"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add tag"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Add to Favorites"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Add..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Add: "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/signature.js:0
+#, python-format
+msgid "Adopt Your Signature"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/signature.js:0
+#, python-format
+msgid "Adopt and Sign"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Advanced Search..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/dialog.js:0
+#, python-format
+msgid "Alert"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "All"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
+#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:0
+#, python-format
+msgid "All day"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "All users"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Alt"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/crash_manager.xml:0
+#, python-format
+msgid "An error occurred"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid ""
+"An unknown CORS error occured. The error probably originates from a "
+"JavaScript file served from a different origin. (Opening your browser "
+"console might give you a hint on the error.)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "And more"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Any"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Apply"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#, python-format
+msgid "Archive"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Archive All"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#, python-format
+msgid ""
+"Are you sure that you want to archive all the records from this column?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#, python-format
+msgid "Are you sure that you want to archive all the selected records?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#, python-format
+msgid "Are you sure that you want to archive this record?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#, python-format
+msgid "Are you sure that you want to remove this column ?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
+#, python-format
+msgid "Are you sure that you want to remove this filter?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/calendar/calendar_controller.js:0
+#, python-format
+msgid "Are you sure you want to delete this record ?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Attach"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Attachment"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Attachment :"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Auto"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Available fields"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Avatar"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Badges"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Bar Chart"
+msgstr ""
+
+#. module: web
+#: model:ir.model,name:web.model_base
+msgid "Base"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Based On"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Become Superuser"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"Binary fields can not be exported to Excel unless their content is "
+"base64-encoded. That does not seem to be the case for %s."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Binary file"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#, python-format
+msgid "Blue"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Bugfixes guarantee"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Button"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Button Type:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid ""
+"By clicking Adopt and Sign, I agree that the chosen signature/initials will "
+"be a valid electronic representation of my hand-written signature/initials "
+"for all purposes when it is used on documents, including legally binding "
+"contracts."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/utils.js:0
+#, python-format
+msgid "Bytes|Kb|Mb|Gb|Tb|Pb|Eb|Zb|Yb"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "CLEAR"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_view.js:0
+#, python-format
+msgid "Calendar"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_view.js:0
+#, python-format
+msgid "Calendar view has not defined 'date_start' attribute."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/js/fields/signature.js:0
+#: code:addons/web/static/src/js/fields/upgrade_fields.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Cancel"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#, python-format
+msgid "Cannot render chart with mode : "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#, python-format
+msgid "Card color: %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/controllers/main.py:0 code:addons/web/controllers/main.py:0
+#: code:addons/web/controllers/main.py:0
+#: code:addons/web/static/src/js/widgets/change_password.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Change Password"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Change default:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Checkbox"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Checkboxes"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
+#, python-format
+msgid "Choose"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Clear"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Clear Events"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Clear Signature"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Close"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_renderer.js:0
+#, python-format
+msgid "Column %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Column title"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.frontend_layout
+msgid "Company name"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Compare To"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Condition:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Confirm New Password"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/core/dialog.js:0
+#, python-format
+msgid "Confirmation"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
+#, python-format
+msgid "Connection lost"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
+#, python-format
+msgid "Connection restored"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Context:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Control"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Copied !"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Copy Text"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/crash_manager.xml:0
+#, python-format
+msgid "Copy the full error to clipboard"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Copy to Clipboard"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/ajax.js:0
+#, python-format
+msgid "Could not connect to the server"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/js/fields/signature.js:0
+#, python-format
+msgid "Could not display the selected image."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/utils.js:0
+#, python-format
+msgid "Could not serialize XML"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#, python-format
+msgid ""
+"Could not set the cover image: incorrect field (\"%s\") is provided in the "
+"view."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_view.js:0
+#: code:addons/web/static/src/js/views/graph/graph_view.js:0
+#: code:addons/web/static/src/js/views/pivot/pivot_view.js:0
+#: code:addons/web/static/src/js/views/pivot/pivot_view.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Count"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/js/views/calendar/calendar_controller.js:0
+#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
+#: code:addons/web/static/src/js/views/kanban/kanban_controller.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Create"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#, python-format
+msgid "Create "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Create \"<strong>%s</strong>\""
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Create a %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Create a new record"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Create and Edit..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Create and edit"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Create: "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_controller.js:0
+#, python-format
+msgid "Create: %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Created by :"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Creation Date:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Creation User:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Current state"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Dark blue"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Dark purple"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login
+msgid "Database"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Date"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Date & Time"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Day"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.debug_icon
+msgid ""
+"Debug mode is activated#{debug_mode_help}. Click here to exit debug mode."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Decimal"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Default:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Delete"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Delete node"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
+#, python-format
+msgid "Delete row "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Delete this attachment"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Description"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Discard"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Discard a record modification"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Do you really want to delete this export template?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_renderer.js:0
+#, python-format
+msgid "Do you really want to delete this filter from favorites ?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#, python-format
+msgid "Do you want to set the value on the %d selected records?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#, python-format
+msgid ""
+"Do you want to set the value on the %d valid selected records? (%d invalid)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Documentation"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Domain"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "Domain error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Domain:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#, python-format
+msgid "Don't leave yet,<br />it's still loading..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Download xls"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Draw"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Dropdown menu"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#, python-format
+msgid "Duplicate"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Edit"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Edit Action"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#, python-format
+msgid "Edit Column"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Edit ControlPanelView"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Edit Domain"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Edit Stage"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Edit View:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Edit a record"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: model_terms:ir.ui.view,arch_db:web.login
+#, python-format
+msgid "Email"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
+msgid "Email:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:0
+#, python-format
+msgid "Error"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "Error, password not changed !"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Esc to discard"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
+#, python-format
+msgid "Everybody's calendars"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
+#, python-format
+msgid "Everything"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Expand all"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Export"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Export Data"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Export Format:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/controllers/main.py:0 code:addons/web/controllers/main.py:0
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "External ID"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "External link"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "FILTER"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/control_panel_model.js:0
+#, python-format
+msgid "Failed to evaluate search criterions"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "False"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
+#, python-format
+msgid "Favorites"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Field:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Fields View Get"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Fields to export"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "File"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "File Upload"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "File upload"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "Filter on: %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/add_new_favorite_menu.js:0
+#, python-format
+msgid "Filter with same name already exists."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/filter_menu.js:0
+#, python-format
+msgid "Filters"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Flip axis"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Fold"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Followed by"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/pivot/pivot_controller.js:0
+#, python-format
+msgid ""
+"For Excel compatibility, data cannot be exported if there are more than 256 columns.\n"
+"\n"
+"Tip: try to flip axis, filter further or reduce the number of measures."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_view.js:0
+#, python-format
+msgid "Form"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/qweb/qweb_view.js:0
+#, python-format
+msgid "Freedom View"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Full Name"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Fushia"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Get this feature and much more with Odoo Enterprise!"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Global Business Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_quick_create.js:0
+#, python-format
+msgid "Got it"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_view.js:0
+#, python-format
+msgid "Graph"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Green"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/groupby_menu.js:0
+#, python-format
+msgid "Group By"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "Group by: %s"
+msgstr ""
+
+#. module: web
+#: model:ir.model,name:web.model_ir_http
+msgid "HTTP Routing"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Handle"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Hide in Kanban"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Hit DOWN to navigate to the list below"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Hit ENTER to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Hit ENTER to CREATE"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Hit ENTER to SAVE"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Hit ESCAPE to DISCARD"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#, python-format
+msgid "Hue"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/dialog.js:0
+#, python-format
+msgid "I am sure about this."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "I want to update data (import-compatible export)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "ID:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#: code:addons/web/static/src/js/fields/signature.js:0
+#, python-format
+msgid "Image"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Integer"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#, python-format
+msgid "Invalid data"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0 code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"Invalid database name. Only alphanumerical characters, underscore, hyphen "
+"and dot are allowed."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Invalid domain"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/model_field_selector.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Invalid field chain"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "Invalid inherit mode. Module %s and template name %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#, python-format
+msgid "Invalid mode for chart"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "JS Mobile Tests"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "JS Tests"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_view.js:0
+#, python-format
+msgid "Kanban"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/user_menu.js:0
+#, python-format
+msgid "Keyboard Shortcuts"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "Languages"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last 30 Days"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last 365 Days"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last 5 Years"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last 7 Days"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last Month"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last Quarter"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last Week"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Last Year"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Latest Modification Date:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Latest Modification by:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Leave the Developer Tools"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Light blue"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#, python-format
+msgid "Lightness %"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Line Chart"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_view.js:0
+#, python-format
+msgid "List"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Load"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Load more... ("
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/loading.js:0
+#, python-format
+msgid "Loading"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/loading.js:0
+#, python-format
+msgid "Loading (%d)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Loading, please wait..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Loading..."
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login
+msgid "Log in"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login
+msgid "Log in as superuser"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Log out"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_background
+#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
+#: model_terms:ir.ui.view,arch_db:web.external_layout_clean
+#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
+#: model_terms:ir.ui.view,arch_db:web.frontend_layout
+#: model_terms:ir.ui.view,arch_db:web.login_layout
+msgid "Logo"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Mac"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
+msgid "Mail:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Manage Attachments"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login_layout
+msgid "Manage Databases"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Manage Filters"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Many2many"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Many2one"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Match"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Match records with"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Match records with the following rule:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#, python-format
+msgid "Maybe you should consider reloading the application by pressing F5..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Measures"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Medium blue"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "Metadata (%s)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Method:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Missing Record"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Mobile support"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Modified by :"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Modifiers:"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"Module %s not loaded or inexistent, or templates of addon being loaded (%s) "
+"are misordered"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Monetary"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Month"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_renderer.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "More"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Multiline Text"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "My Odoo.com account"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "NONE"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Name:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_model.js:0
+#, python-format
+msgid "New"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "New Password"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "New design"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "New template"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Next"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "No"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "No Update:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "No attachment available"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "No color"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#, python-format
+msgid "No data"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "No data to display"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "No match found."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "No metadata available"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "No records"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#, python-format
+msgid "No records found!"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "No results to show..."
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "No template found to inherit from. Module %s and template name %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#, python-format
+msgid "No valid record to save"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "None"
+msgstr ""
+
+#. module: web
+#: code:addons/web/models/models.py:0 code:addons/web/models/models.py:0
+#: code:addons/web/models/models.py:0
+#, python-format
+msgid "Not Set"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Not active state"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Not active state, click to change it"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Object:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: model_terms:ir.ui.view,arch_db:web.brand_promotion_message
+#, python-format
+msgid "Odoo"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/apps.js:0
+#, python-format
+msgid "Odoo Apps will be available soon"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Odoo Client Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/upgrade_fields.js:0
+#, python-format
+msgid "Odoo Enterprise"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Odoo Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Odoo Session Expired"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Odoo Warning"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/core/dialog.js:0
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#, python-format
+msgid "Ok"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Old Password"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "On change:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "One2many"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Only Integer Value should be valid."
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"Only employee can access this database. Please contact the administrator."
+msgstr ""
+
+#. module: web
+#: code:addons/web/models/models.py:0
+#, python-format
+msgid ""
+"Only types %(supported_types)s are supported for category (found type "
+"%(field_type)s)"
+msgstr ""
+
+#. module: web
+#: code:addons/web/models/models.py:0
+#, python-format
+msgid ""
+"Only types %(supported_types)s are supported for filter (found type "
+"%(field_type)s)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Only you"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#, python-format
+msgid "Opacity %"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Open View"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Open the next record"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Open the previous record"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Open to kanban view"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Open to list view"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/js/views/calendar/calendar_controller.js:0
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#, python-format
+msgid "Open: "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Orange"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "PDF Viewer"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_background
+msgid ""
+"Page:\n"
+" <span class=\"page\"/>\n"
+" of\n"
+" <span class=\"topage\"/>"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
+#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
+msgid "Page: <span class=\"page\"/> / <span class=\"topage\"/>"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login
+msgid "Password"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Percentage"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Percentage Pie"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Phone"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
+msgid "Phone:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
+#, python-format
+msgid "Pick a color"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Pie Chart"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#, python-format
+msgid ""
+"Pie chart cannot display all zero numbers.. Try to change your domain to "
+"display positive results"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#, python-format
+msgid ""
+"Pie chart cannot mix positive and negative numbers. Try to change your "
+"domain to only display positive results"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/pivot/pivot_view.js:0
+#, python-format
+msgid "Pivot"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/js/views/list/list_renderer.js:0
+#, python-format
+msgid "Please click on the \"save\" button first."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Please enter save field list name"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Please select fields to export..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Please select fields to save export list..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Please update translations of :"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/crash_manager.xml:0
+#, python-format
+msgid ""
+"Please use the copy button to report the error to your support service."
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.brand_promotion_message
+msgid "Powered by %s%s"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login_layout
+msgid "Powered by <span>Odoo</span>"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Preferences"
+msgstr ""
+
+#. module: web
+#: model:ir.actions.report,name:web.action_report_externalpreview
+msgid "Preview External Report"
+msgstr ""
+
+#. module: web
+#: model:ir.actions.report,name:web.action_report_internalpreview
+msgid "Preview Internal Report"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Previous"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Previous Period"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Previous Year"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/sidebar.js:0
+#: code:addons/web/static/src/xml/report.xml:0
+#, python-format
+msgid "Print"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Priority"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Progress Bar"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Purple"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Q1"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Q2"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Q3"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Q4"
+msgstr ""
+
+#. module: web
+#: model:ir.model.fields.selection,name:web.selection__ir_actions_act_window_view__view_mode__qweb
+msgid "QWeb"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Quarter"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Quick add"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Quick search: %s"
+msgstr ""
+
+#. module: web
+#: model:ir.model,name:web.model_ir_qweb_field_image
+msgid "Qweb Field Image"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Radio"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Range"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Red"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Regenerate Assets Bundles"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/model_field_selector.js:0
+#, python-format
+msgid "Relation not allowed"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Relation to follow"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Relation:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Remove"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#, python-format
+msgid "Remove Cover Image"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/data_export.js:0
+#, python-format
+msgid "Remove field"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Remove from Favorites"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Remove tag"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Remove this favorite from the list"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#, python-format
+msgid "Report"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Request timeout"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Run Click Everywhere Test"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Run JS Mobile Tests"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Run JS Tests"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "SEE RESULT"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/signature.js:0
+#, python-format
+msgid "SIGNATURE"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Salmon pink"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/colorpicker_dialog.xml:0
+#, python-format
+msgid "Saturation %"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Save"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#, python-format
+msgid "Save & Close"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#, python-format
+msgid "Save & New"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Save As..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Save Current Search"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Save a record"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Save as :"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "Save default"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Search"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "Search %(field)s at: %(value)s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "Search %(field)s for: %(value)s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Search More..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Search..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Search: "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/crash_manager.xml:0
+#, python-format
+msgid "See details"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "See examples"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/js/views/view_dialogs.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Select"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.login
+msgid ""
+"Select <i class=\"fa fa-database\" role=\"img\" aria-label=\"Database\" "
+"title=\"Database\"/>"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Select Signature Style"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Select a model to add a filter."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "Select a view"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Select field"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Selected records"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Selection"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Selection:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#, python-format
+msgid "Set Default"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Set Defaults"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#, python-format
+msgid "Set a Cover Image"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/special_fields.js:0
+#, python-format
+msgid "Set a timezone on your user"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Settings"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Share with all users"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Shortcuts"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Show sub-fields"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/apps.js:0
+#, python-format
+msgid "Showing locally available modules"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/signature.js:0
+#, python-format
+msgid "Signature"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Size:"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "Something horrible happened"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Something went wrong !"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Special:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Stacked"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#, python-format
+msgid "Still loading..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#, python-format
+msgid "Still loading...<br />Please be patient."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Style"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Styles"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
+#, python-format
+msgid "Summary"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Summary:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Support"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "Syntax error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Tags"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#, python-format
+msgid "Take a minute to get a coffee,<br />because it's loading..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Tap on the list to change company"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Technical Translation"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
+#: model_terms:ir.ui.view,arch_db:web.external_layout_clean
+msgid "Tel:"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "Template %s already exists in module %s"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Template:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Text"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"The content of this cell is too long for an XLSX file (more than %s "
+"characters). Please use the CSV format for this export."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "The domain you entered is not properly formed"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/model_field_selector.js:0
+#, python-format
+msgid ""
+"The field chain is not valid. Did you maybe use a non-existing field name or"
+" followed a non-relational field?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "The field is empty, there's nothing to save !"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_quick_create.js:0
+#, python-format
+msgid "The following field is invalid:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/widgets/attach_document.js:0
+#, python-format
+msgid "The following fields are invalid:"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "The new password and its confirmation must be identical."
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"The old password you provided is incorrect, your password was not changed."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid ""
+"The operation was interrupted. This usually means that the current operation"
+" is taking too much time."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"The record has been modified, your changes will be discarded. Do you want to"
+" proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "The selected file exceed the maximum file size of %s."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid ""
+"The type of the field '%s' must be a many2many field with a relation to "
+"'ir.attachment' model."
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"There are too many rows (%s rows, limit: %s) to export as Excel 2007-2013 "
+"(.xlsx) format. Consider splitting the export."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "There is no available image to be set as cover."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "There was a problem while uploading your file"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "This Month"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "This Quarter"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "This Week"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "This Year"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/date_picker.js:0
+#, python-format
+msgid "This date is on the future. Make sure it is what you expected."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "This domain is not supported."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "This file is invalid. Please select an image."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
+#, python-format
+msgid ""
+"This filter is global and will be removed for everybody if you continue."
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.preview_externalreport
+msgid "This is a sample of an external report."
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.preview_internalreport
+msgid "This is a sample of an internal report."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Time"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Time Ranges"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/special_fields.js:0
+#, python-format
+msgid ""
+"Timezone Mismatch : This timezone is different from that of your browser.\n"
+"Please, set the same timezone as your browser's to avoid time discrepancies in your system."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Today"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Toggle"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "Toggle Timelines"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#: code:addons/web/static/src/js/views/pivot/pivot_model.js:0
+#: code:addons/web/static/src/js/views/pivot/pivot_model.js:0
+#, python-format
+msgid "Total"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Traceback:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/field_utils.js:0
+#, python-format
+msgid "True"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/pivot/pivot_renderer.js:0
+#, python-format
+msgid ""
+"Try to add some records, or make sure that there is at least one measure and"
+" no active filter in the search bar."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid ""
+"Try to add some records, or make sure that there is no\n"
+" active filter in the search bar."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
+#, python-format
+msgid "Trying to reconnect..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Type:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "URL"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#, python-format
+msgid ""
+"Unable to find Wkhtmltopdf on this system. The report will be shown in html."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/form/form_controller.js:0
+#: code:addons/web/static/src/js/views/list/list_controller.js:0
+#, python-format
+msgid "Unarchive"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Unarchive All"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
+#: code:addons/web/static/src/js/views/graph/graph_model.js:0
+#: code:addons/web/static/src/js/views/graph/graph_renderer.js:0
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#: code:addons/web/static/src/js/views/kanban/kanban_column.js:0
+#: code:addons/web/static/src/js/views/kanban/kanban_renderer_mobile.js:0
+#: code:addons/web/static/src/js/views/list/list_renderer.js:0
+#: code:addons/web/static/src/js/views/list/list_renderer.js:0
+#: code:addons/web/static/src/js/views/pivot/pivot_model.js:0
+#, python-format
+msgid "Undefined"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Unfold"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Unknown CORS error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/py_utils.js:0
+#, python-format
+msgid "Unknown nonliteral type "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/list/list_editable_renderer.js:0
+#, python-format
+msgid "Unlink row "
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/_deprecated/data.js:0
+#, python-format
+msgid "Unnamed"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/pivot/pivot_view.js:0
+#, python-format
+msgid "Untitled"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/upgrade_fields.js:0
+#, python-format
+msgid "Upgrade now"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Upgrade to enterprise"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Upgrade to future versions"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#, python-format
+msgid "Upload and Set"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Upload your file"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Uploaded"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Uploading"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "Uploading Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Uploading..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Use by default"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "User Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Users"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Validation Error"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/pivot/pivot_model.js:0
+#, python-format
+msgid "Variation"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/tools/debug_manager_backend.js:0
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "View Fields"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "View Metadata"
+msgstr ""
+
+#. module: web
+#: model:ir.model.fields,field_description:web.field_ir_actions_act_window_view__view_mode
+msgid "View Type"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager.js:0
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
+#: code:addons/web/static/src/js/views/list/list_renderer.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Warning"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/attach_document.js:0
+#, python-format
+msgid "Warning : You have to save first before attaching a file."
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.benchmark_suite
+msgid "Web Benchmarks"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.qunit_mobile_suite
+msgid "Web Mobile Tests"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.qunit_suite
+msgid "Web Tests"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.external_layout_boxed
+#: model_terms:ir.ui.view,arch_db:web.external_layout_standard
+msgid "Web:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/calendar/calendar_model.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/web_calendar.xml:0
+#, python-format
+msgid "Week"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/rainbow_man.js:0
+#, python-format
+msgid "Well Done!"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Widget:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/menu.xml:0
+#, python-format
+msgid "Windows/Linux"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "Wrong login/password"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/basic_fields.js:0
+#, python-format
+msgid "Wrong value entered!"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/debug.xml:0
+#, python-format
+msgid "XML ID:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Year"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "Yellow"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "Yes"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/control_panel_view_parameters.js:0
+#, python-format
+msgid "Yesterday"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/abstract_web_client.js:0
+#, python-format
+msgid "You are back online"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/fields/relational_fields.js:0
+#, python-format
+msgid "You are creating a new %s, are you sure it does not exist yet?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/model_field_selector.js:0
+#, python-format
+msgid "You cannot follow relations for this field chain construction"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid "You cannot leave any password empty."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/misc.js:0
+#, python-format
+msgid ""
+"You may not believe it,<br />but the application is actually loading..."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#, python-format
+msgid ""
+"You need to start Odoo with at least two workers to print a pdf version of "
+"the reports."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#, python-format
+msgid ""
+"You should upgrade your version of Wkhtmltopdf to at least 0.12.0 in order "
+"to get a correct display of headers and footers as well as support for "
+"table-breaking between pages."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/services/crash_manager.js:0
+#, python-format
+msgid "Your Odoo session expired. Please refresh the current web page."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
+#, python-format
+msgid ""
+"Your installation of Wkhtmltopdf seems to be broken. The report will be "
+"shown in html."
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/name_and_signature.js:0
+#: code:addons/web/static/src/xml/name_and_signature.xml:0
+#, python-format
+msgid "Your name"
+msgstr ""
+
+#. module: web
+#: code:addons/web/controllers/main.py:0
+#, python-format
+msgid ""
+"Your password is the default (admin)! If this system is exposed to untrusted"
+" users it is important to change it immediately for security reasons. I will"
+" keep nagging you about it!"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_record.js:0
+#, python-format
+msgid "[No widget %s]"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "a day ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "about a minute ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "about a month ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "about a year ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "about an hour ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "all records"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "child of"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "contains"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "does not contain"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "doesn't contain"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "greater than"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "greater than or equal to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "in"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "is"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is after"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is after or equal to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is before"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is before or equal to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is between"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is equal to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is false"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "is not"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "is not ="
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is not equal to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "is not set"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "is set"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "is true"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/utils.js:0
+#, python-format
+msgid "kMGTPE"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "less than"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/core/translation.js:0
+#, python-format
+msgid "less than a minute ago"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_filters.js:0
+#, python-format
+msgid "less than or equal to"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "not"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "not a valid integer"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_bar_autocomplete_sources.js:0
+#, python-format
+msgid "not a valid number"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "not in"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "not set (false)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "of the following rules:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "of:"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/views/control_panel/search/search_facet.js:0
+#: code:addons/web/static/src/js/views/control_panel/search/search_facet.js:0
+#: code:addons/web/static/src/xml/base.xml:0
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "or"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "parent of"
+msgstr ""
+
+#. module: web
+#: model_terms:ir.ui.view,arch_db:web.brand_promotion
+msgid "portal"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "record(s)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/kanban.xml:0
+#, python-format
+msgid "remaining)"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/xml/base.xml:0
+#, python-format
+msgid "set"
+msgstr ""
+
+#. module: web
+#. openerp-web
+#: code:addons/web/static/src/js/widgets/domain_selector.js:0
+#, python-format
+msgid "set (true)"
+msgstr ""
diff --git a/addons/web/i18n/lt.po b/addons/web/i18n/lt.po
index 26020000cd9..fdceded875c 100644
--- a/addons/web/i18n/lt.po
+++ b/addons/web/i18n/lt.po
@@ -24,7 +24,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
"Last-Translator: Linas Versada <linaskrisiukenas@gmail.com>, 2019\n"
"Language-Team: Lithuanian (https://www.transifex.com/odoo/teams/41243/lt/)\n"
@@ -1276,6 +1276,7 @@ msgstr "Aprašymas"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2652,6 +2653,13 @@ msgstr "Oranžinė"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Kita"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3101,6 +3109,7 @@ msgstr "Spalvingumas %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3755,6 +3764,13 @@ msgstr "Atsekamumas:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4009,6 +4025,7 @@ msgstr "Rodinio tipas"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4164,6 +4181,15 @@ msgstr "Nepatikėsite, <br /> bet programa iš tikrųjų kraunasi..."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/mn.po b/addons/web/i18n/mn.po
index 19a101aa698..f420b9c9f68 100644
--- a/addons/web/i18n/mn.po
+++ b/addons/web/i18n/mn.po
@@ -5,17 +5,17 @@
# Translators:
# Otgonbayar.A <gobi.mn@gmail.com>, 2019
# Khishigbat Ganbold <khishigbat@asterisk-tech.mn>, 2019
+# Minj P <pminj322@gmail.com>, 2019
# Baskhuu Lodoikhuu <baskhuujacara@gmail.com>, 2019
# Martin Trigaux, 2019
-# Minj P <pminj322@gmail.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Minj P <pminj322@gmail.com>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: Mongolian (https://www.transifex.com/odoo/teams/41243/mn/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1259,6 +1259,7 @@ msgstr "Тайлбар"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2632,6 +2633,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Бусад"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -2804,7 +2812,7 @@ msgstr "Дотоод тайланг урьдчилан харах"
#: code:addons/web/static/src/xml/web_calendar.xml:0
#, python-format
msgid "Previous"
-msgstr ""
+msgstr "Өмнөх"
#. module: web
#. openerp-web
@@ -3075,6 +3083,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3726,6 +3735,13 @@ msgstr "Алдааны мөр:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3978,6 +3994,7 @@ msgstr "Дэлгэцийн төрөл"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4134,6 +4151,15 @@ msgstr "Таныг удаан хүлээлгэж байгаад уучлаара
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/nb.po b/addons/web/i18n/nb.po
index 8a202a03cb6..93faaeb3f25 100644
--- a/addons/web/i18n/nb.po
+++ b/addons/web/i18n/nb.po
@@ -4,17 +4,17 @@
#
# Translators:
# Eirik Halvorsen <eirik386@gmail.com>, 2019
-# Martin Trigaux, 2019
# Jorunn D. Newth, 2019
# Marius Stedjan <marius@stedjan.com>, 2019
+# Martin Trigaux, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Marius Stedjan <marius@stedjan.com>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: Norwegian Bokmål (https://www.transifex.com/odoo/teams/41243/nb/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1265,6 +1265,7 @@ msgstr "Beskrivelse"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2639,6 +2640,13 @@ msgstr "Oransje"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Annet"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3086,6 +3094,7 @@ msgstr "Fargetetthet %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3744,6 +3753,13 @@ msgstr "Sporing:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3996,6 +4012,7 @@ msgstr "Se type"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4153,6 +4170,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/nl.po b/addons/web/i18n/nl.po
index bff7e2c3b89..f8592a13544 100644
--- a/addons/web/i18n/nl.po
+++ b/addons/web/i18n/nl.po
@@ -9,16 +9,17 @@
# Volluta <volluta@tutanota.com>, 2019
# Cas Vissers <casvissers@brahoo.nl>, 2019
# Martin Trigaux, 2019
-# Erwin van der Ploeg <erwin@odooexperts.nl>, 2019
# Yenthe Van Ginneken <yenthespam@gmail.com>, 2019
+# Gunther Clauwaert <gclauwae@hotmail.com>, 2019
+# Erwin van der Ploeg <erwin@odooexperts.nl>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Yenthe Van Ginneken <yenthespam@gmail.com>, 2019\n"
+"Last-Translator: Erwin van der Ploeg <erwin@odooexperts.nl>, 2019\n"
"Language-Team: Dutch (https://www.transifex.com/odoo/teams/41243/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -335,7 +336,7 @@ msgstr "Activeer assets debugging"
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Activate Tests Assets Debugging"
-msgstr ""
+msgstr "Activeer Tests assets debugging"
#. module: web
#. openerp-web
@@ -379,7 +380,7 @@ msgstr "Kolom toevoegen"
#: code:addons/web/static/src/xml/base.xml:0
#, python-format
msgid "Add a condition"
-msgstr "Conditie toevoegen"
+msgstr "Toevoegen"
#. module: web
#. openerp-web
@@ -1048,6 +1049,8 @@ msgid ""
"Could not set the cover image: incorrect field (\"%s\") is provided in the "
"view."
msgstr ""
+"Kon de omslagafbeelding niet instellen: onjuist veld (\"%s\") wordt "
+"weergegeven in de weergave."
#. module: web
#. openerp-web
@@ -1210,6 +1213,8 @@ msgstr "Dag"
msgid ""
"Debug mode is activated#{debug_mode_help}. Click here to exit debug mode."
msgstr ""
+"Debug mode is geactiveerd#{debug_mode_help}. Klik hier om de debug mode te "
+"verlaten."
#. module: web
#. openerp-web
@@ -1272,6 +1277,7 @@ msgstr "Omschrijving"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2653,6 +2659,13 @@ msgstr "Oranje"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Overige"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3101,6 +3114,7 @@ msgstr "Verzadiging %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3740,7 +3754,7 @@ msgstr "Schakelen"
#: code:addons/web/static/src/xml/debug.xml:0
#, python-format
msgid "Toggle Timelines"
-msgstr "Wissel tijdlijnen"
+msgstr "Wissel tijden"
#. module: web
#. openerp-web
@@ -3761,6 +3775,13 @@ msgstr "Traceback:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4015,6 +4036,7 @@ msgstr "Soort weergave"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4173,6 +4195,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
@@ -4229,6 +4260,10 @@ msgid ""
" users it is important to change it immediately for security reasons. I will"
" keep nagging you about it!"
msgstr ""
+"Uw wachtwoord is het standaard (admin)! Als dit systeem wordt blootgesteld "
+"aan niet-vertrouwde gebruikers, is het belangrijk om het om "
+"veiligheidsredenen onmiddellijk te wijzigen. Ik zal je er blijven over "
+"zeuren ;-) !"
#. module: web
#. openerp-web
diff --git a/addons/web/i18n/pl.po b/addons/web/i18n/pl.po
index 0bb38070845..d0293f83078 100644
--- a/addons/web/i18n/pl.po
+++ b/addons/web/i18n/pl.po
@@ -30,14 +30,15 @@
# Piotr Szlązak <szlazakpiotr@gmail.com>, 2019
# Paweł Michoń <michon.pawel@wp.pl>, 2019
# Paweł Wodyński <pw@myodoo.pl>, 2019
+# zieloo <zieloo@gmail.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Paweł Wodyński <pw@myodoo.pl>, 2019\n"
+"Last-Translator: zieloo <zieloo@gmail.com>, 2019\n"
"Language-Team: Polish (https://www.transifex.com/odoo/teams/41243/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1290,6 +1291,7 @@ msgstr "Opis"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2666,6 +2668,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Inne"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3113,6 +3122,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3767,6 +3777,13 @@ msgstr "Traceback:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4019,6 +4036,7 @@ msgstr "Typ widoku"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4174,6 +4192,15 @@ msgstr "Może nie wierzysz,<br />ale aplikacja ciągle się ładuje..."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/pt_BR.po b/addons/web/i18n/pt_BR.po
index 864826833ec..88666d5011e 100644
--- a/addons/web/i18n/pt_BR.po
+++ b/addons/web/i18n/pt_BR.po
@@ -22,16 +22,16 @@
# Mateus Pinheiro <smateusbp@gmail.com>, 2019
# danimaribeiro <danimaribeiro@gmail.com>, 2019
# Martin Trigaux, 2019
-# Mateus Lopes <mateus1@gmail.com>, 2019
# grazziano <gra.negocia@gmail.com>, 2019
+# Mateus Lopes <mateus1@gmail.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: grazziano <gra.negocia@gmail.com>, 2019\n"
+"Last-Translator: Mateus Lopes <mateus1@gmail.com>, 2019\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/odoo/teams/41243/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1268,6 +1268,7 @@ msgstr "Descrição"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2639,6 +2640,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Outro"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3082,6 +3090,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3732,6 +3741,13 @@ msgstr "Traceback:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3984,6 +4000,7 @@ msgstr "Tipo de Visão"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4142,6 +4159,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/ru.po b/addons/web/i18n/ru.po
index b59a70d7553..732e89c1a70 100644
--- a/addons/web/i18n/ru.po
+++ b/addons/web/i18n/ru.po
@@ -19,16 +19,16 @@
# Sergo S, 2019
# Oleg Kuryan <oleg@ventor.tech>, 2019
# Konstantin Korovin <korovin74@gmail.com>, 2019
-# Martin Trigaux, 2019
# Андрей Гусев <gaussgss@gmail.com>, 2019
+# Martin Trigaux, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Андрей Гусев <gaussgss@gmail.com>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: Russian (https://www.transifex.com/odoo/teams/41243/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1274,6 +1274,7 @@ msgstr "Описание"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2650,6 +2651,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Другое"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3096,6 +3104,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3746,6 +3755,13 @@ msgstr "Отслеживающий:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3998,6 +4014,7 @@ msgstr "Тип представления"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4153,6 +4170,15 @@ msgstr "Вы можете не верить,<br />но приложение на
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/tr.po b/addons/web/i18n/tr.po
index d1d14ff1390..0e5a88226f3 100644
--- a/addons/web/i18n/tr.po
+++ b/addons/web/i18n/tr.po
@@ -18,17 +18,17 @@
# Ediz Duman <neps1192@gmail.com>, 2019
# Ayhan KIZILTAN <akiziltan76@hotmail.com>, 2019
# Martin Trigaux, 2019
-# Murat Kaplan <muratk@projetgrup.com>, 2019
# Saban Yildiz <sabany@projetgrup.com>, 2019
# Umur Akın <umura@projetgrup.com>, 2019
+# Murat Kaplan <muratk@projetgrup.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Umur Akın <umura@projetgrup.com>, 2019\n"
+"Last-Translator: Murat Kaplan <muratk@projetgrup.com>, 2019\n"
"Language-Team: Turkish (https://www.transifex.com/odoo/teams/41243/tr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1277,6 +1277,7 @@ msgstr "Açıklama"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2654,6 +2655,13 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Diğer"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3102,6 +3110,7 @@ msgstr ""
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3752,6 +3761,13 @@ msgstr "Silsile takibi:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4004,6 +4020,7 @@ msgstr "Görünüm Türü"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4160,6 +4177,15 @@ msgstr "İnanamayabilirsin ama, <br /> uygulama gerçekten yükleniyor..."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/uk.po b/addons/web/i18n/uk.po
index 8f00d57b8c9..ed169f216f0 100644
--- a/addons/web/i18n/uk.po
+++ b/addons/web/i18n/uk.po
@@ -5,17 +5,17 @@
# Translators:
# Zoriana Zaiats, 2019
# Bohdan Lisnenko, 2019
-# Martin Trigaux, 2019
# ТАрас <tratatuta@i.ua>, 2019
# Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019
+# Martin Trigaux, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Alina Lisnenko <alinasemeniuk1@gmail.com>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: Ukrainian (https://www.transifex.com/odoo/teams/41243/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1273,6 +1273,7 @@ msgstr "Опис"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2653,6 +2654,13 @@ msgstr "Помаранчевий"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Інше"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3102,6 +3110,7 @@ msgstr "Насиченість %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3756,6 +3765,13 @@ msgstr "Простежити:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4009,6 +4025,7 @@ msgstr "Тип перегляду"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4164,6 +4181,15 @@ msgstr "Можете не вірити,<br />але програма дійснÐ
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/vi.po b/addons/web/i18n/vi.po
index fb6ee86670e..6c55e180e98 100644
--- a/addons/web/i18n/vi.po
+++ b/addons/web/i18n/vi.po
@@ -12,17 +12,17 @@
# Minh Nguyen <ndminh210994@gmail.com>, 2019
# Dung Nguyen Thi <dungnt@trobz.com>, 2019
# Dao Nguyen <trucdao.uel@gmail.com>, 2019
-# Nancy Momoland <thanhnguyen.icsc@gmail.com>, 2019
# Duy BQ <duybq86@gmail.com>, 2019
# Chinh Chinh <trinhttp@trobz.com>, 2019
+# Nancy Momoland <thanhnguyen.icsc@gmail.com>, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: Chinh Chinh <trinhttp@trobz.com>, 2019\n"
+"Last-Translator: Nancy Momoland <thanhnguyen.icsc@gmail.com>, 2019\n"
"Language-Team: Vietnamese (https://www.transifex.com/odoo/teams/41243/vi/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1271,6 +1271,7 @@ msgstr "Mô tả"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2647,6 +2648,13 @@ msgstr "Màu cam"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "Khác"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3096,6 +3104,7 @@ msgstr "Độ bão hòa %"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3753,6 +3762,13 @@ msgstr "Traceback:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -4007,6 +4023,7 @@ msgstr "Dạng hiển thị"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4164,6 +4181,15 @@ msgstr ""
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/zh_CN.po b/addons/web/i18n/zh_CN.po
index b99d03c11b4..76d35539ad6 100644
--- a/addons/web/i18n/zh_CN.po
+++ b/addons/web/i18n/zh_CN.po
@@ -29,17 +29,17 @@
# Felix Yuen <fyu@odoo.com>, 2019
# snow wang <147156565@qq.com>, 2019
# inspur qiuguodong <qiuguodong@inspur.com>, 2019
-# Martin Trigaux, 2019
# liAnGjiA <liangjia@qq.com>, 2019
# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2019
+# Martin Trigaux, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: Chinese (China) (https://www.transifex.com/odoo/teams/41243/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1280,6 +1280,7 @@ msgstr "说明"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2652,6 +2653,13 @@ msgstr "橘色"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "其他"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3095,6 +3103,7 @@ msgstr "飽和度%"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3742,6 +3751,13 @@ msgstr "追溯:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3994,6 +4010,7 @@ msgstr "视图类型"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4149,6 +4166,15 @@ msgstr "请耐心等待,<br />应用仍在加载..."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/i18n/zh_TW.po b/addons/web/i18n/zh_TW.po
index 12c1f7d0acd..e7a38d81f4b 100644
--- a/addons/web/i18n/zh_TW.po
+++ b/addons/web/i18n/zh_TW.po
@@ -5,17 +5,17 @@
# Translators:
# Ying <acc.tou@gmail.com>, 2019
# Andy Cheng <andy.cheng@richsoda.com>, 2019
-# Martin Trigaux, 2019
# sejun huang <sejun.huang@gmail.com>, 2019
# 敬雲 林 <chingyun@yuanchih-consult.com>, 2019
+# Martin Trigaux, 2019
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server saas~12.5\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2019-08-26 08:17+0000\n"
+"POT-Creation-Date: 2019-09-13 11:28+0000\n"
"PO-Revision-Date: 2019-08-26 09:15+0000\n"
-"Last-Translator: 敬雲 林 <chingyun@yuanchih-consult.com>, 2019\n"
+"Last-Translator: Martin Trigaux, 2019\n"
"Language-Team: Chinese (Taiwan) (https://www.transifex.com/odoo/teams/41243/zh_TW/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -1255,6 +1255,7 @@ msgstr "說明"
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/colorpicker_dialog.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/kanban.xml:0
@@ -2627,6 +2628,13 @@ msgstr "橘色"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/kanban/kanban_column_progressbar.js:0
+#, python-format
+msgid "Other"
+msgstr "其他"
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/basic_fields.js:0
#, python-format
msgid "PDF Viewer"
@@ -3070,6 +3078,7 @@ msgstr "飽和度%"
#. openerp-web
#: code:addons/web/static/src/js/views/view_dialogs.js:0
#: code:addons/web/static/src/js/widgets/domain_selector_dialog.js:0
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -3719,6 +3728,13 @@ msgstr "追溯:"
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/widgets/translation_dialog.js:0
+#, python-format
+msgid "Translate: "
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/fields/field_utils.js:0
#, python-format
msgid "True"
@@ -3971,6 +3987,7 @@ msgstr "檢視類型"
#: code:addons/web/static/src/js/fields/relational_fields.js:0
#: code:addons/web/static/src/js/services/crash_manager.js:0
#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
#: code:addons/web/static/src/js/views/control_panel/search/favorite_menu.js:0
#: code:addons/web/static/src/js/views/list/list_renderer.js:0
#: code:addons/web/static/src/xml/base.xml:0
@@ -4126,6 +4143,15 @@ msgstr "也許您不相信,<br />但是這個應用真的還在加載...."
#. module: web
#. openerp-web
+#: code:addons/web/static/src/js/views/basic/basic_controller.js:0
+#, python-format
+msgid ""
+"You need to save this new record before editing the translation. Do you want"
+" to proceed?"
+msgstr ""
+
+#. module: web
+#. openerp-web
#: code:addons/web/static/src/js/chrome/action_manager_report.js:0
#, python-format
msgid ""
diff --git a/addons/web/static/src/js/chrome/action_manager_act_window.js b/addons/web/static/src/js/chrome/action_manager_act_window.js
index 1a08bf59a9a..6027e21bb42 100644
--- a/addons/web/static/src/js/chrome/action_manager_act_window.js
+++ b/addons/web/static/src/js/chrome/action_manager_act_window.js
@@ -697,7 +697,7 @@ ActionManager.include({
};
}
var options = {on_close: ev.data.on_closed};
- action.flags = _.extend({}, action.flags, {withSearchPanel: false});
+ action.flags = _.extend({}, action.flags, {searchPanelDefaultNoFilter: true});
return self.doAction(action, options).then(ev.data.on_success, ev.data.on_fail);
});
},
diff --git a/addons/web/static/src/js/chrome/user_menu.js b/addons/web/static/src/js/chrome/user_menu.js
index 3b93bbd9c3b..ffc23e53273 100644
--- a/addons/web/static/src/js/chrome/user_menu.js
+++ b/addons/web/static/src/js/chrome/user_menu.js
@@ -46,7 +46,7 @@ var UserMenu = Widget.extend({
self.$('.oe_topbar_name').text(topbar_name);
var avatar_src = session.url('/web/image', {
model:'res.users',
- field: 'image_64',
+ field: 'image_128',
id: session.uid,
});
$avatar.attr('src', avatar_src);
diff --git a/addons/web/static/src/js/core/dom.js b/addons/web/static/src/js/core/dom.js
index 7be17700f98..f260478da1e 100644
--- a/addons/web/static/src/js/core/dom.js
+++ b/addons/web/static/src/js/core/dom.js
@@ -108,16 +108,13 @@ var dom = {
class: $textarea[0].className,
});
- var direction = _t.database.parameters.direction === 'rtl' ? 'right' : 'left';
$fixedTextarea.css({
- position: 'absolute',
opacity: 0,
- height: 10,
+ height: 0,
borderTopWidth: 0,
borderBottomWidth: 0,
padding: 0,
- top: -10000,
- }).css(direction, -10000);
+ });
$fixedTextarea.data("auto_resize", true);
// The following line is necessary to prevent the scrollbar to appear
diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js
index da46488cffa..c1d01022c68 100644
--- a/addons/web/static/src/js/fields/basic_fields.js
+++ b/addons/web/static/src/js/fields/basic_fields.js
@@ -684,6 +684,9 @@ var FieldDate = InputField.extend({
className: "o_field_date",
tagName: "span",
supportedFieldTypes: ['date', 'datetime'],
+ // we don't need to listen on 'input' nor 'change' events because the
+ // datepicker widget is already listening, and will correctly notify changes
+ events: AbstractField.prototype.events,
/**
* @override
@@ -1080,6 +1083,8 @@ var FieldBoolean = AbstractField.extend({
_onKeydown: function (ev) {
switch (ev.which) {
case $.ui.keyCode.ENTER:
+ // prevent subsequent 'click' event (see _onKeydown of AbstractField)
+ ev.preventDefault();
this.$input.prop('checked', !this.value);
this._setValue(!this.value);
return;
@@ -2545,11 +2550,28 @@ var FieldProgressBar = AbstractField.extend({
if (this.recordData[this.nodeOptions.current_value]) {
this.value = this.recordData[this.nodeOptions.current_value];
}
- this.max_value = this.recordData[this.nodeOptions.max_value] || 100;
+
+ // The few next lines determine if the widget can write on the record or not
+ this.editable_readonly = !!this.nodeOptions.editable_readonly;
+ // "hard" readonly
this.readonly = this.nodeOptions.readonly || !this.nodeOptions.editable;
- this.edit_max_value = this.nodeOptions.edit_max_value || false;
+
+ this.canWrite = !this.readonly && (
+ this.mode === 'edit' ||
+ (this.editable_readonly && this.mode === 'readonly') ||
+ (this.viewType === 'kanban') // Keep behavior before commit
+ );
+
+ // Boolean to toggle if we edit the numerator (value) or the denominator (max_value)
+ this.edit_max_value = !!this.nodeOptions.edit_max_value;
+ this.max_value = this.recordData[this.nodeOptions.max_value] || 100;
+
this.title = _t(this.attrs.title || this.nodeOptions.title) || '';
- this.edit_on_click = !this.nodeOptions.edit_max_value || false;
+
+ // Ability to edit the field through the bar
+ // /!\ this feature is disabled
+ this.enableBarAsInput = false;
+ this.edit_on_click = this.enableBarAsInput && this.mode === 'readonly' && !this.edit_max_value;
this.write_mode = false;
},
@@ -2557,19 +2579,19 @@ var FieldProgressBar = AbstractField.extend({
var self = this;
this._render_value();
- if (!this.readonly) {
+ if (this.canWrite) {
if (this.edit_on_click) {
this.$el.on('click', '.o_progress', function (e) {
var $target = $(e.currentTarget);
- self.value = Math.floor((e.pageX - $target.offset().left) / $target.outerWidth() * self.max_value);
+ var numValue = Math.floor((e.pageX - $target.offset().left) / $target.outerWidth() * self.max_value);
+ self.on_update(numValue);
self._render_value();
- self.on_update(self.value);
});
} else {
this.$el.on('click', function () {
if (!self.write_mode) {
var $input = $('<input>', {type: 'text', class: 'o_progressbar_value o_input'});
- $input.on('blur', _.bind(self.on_change_input, self));
+ $input.on('blur', self.on_change_input.bind(self));
self.$('.o_progressbar_value').replaceWith($input);
self.write_mode = true;
self._render_value();
@@ -2579,24 +2601,25 @@ var FieldProgressBar = AbstractField.extend({
}
return this._super();
},
+ /**
+ * Updates the widget with value
+ *
+ * @param {Number} value
+ */
on_update: function (value) {
- if (!isNaN(value)) {
- if (this.edit_max_value) {
- try {
- this.max_value = this._parseValue(value);
- this._isValid = true;
- } catch (e) {
- this._isValid = false;
- }
- var changes = {};
- changes[this.nodeOptions.max_value] = this.max_value;
- this.trigger_up('field_changed', {
- dataPointID: this.dataPointID,
- changes: changes,
- });
- } else {
- this._setValue(value);
- }
+ if (this.edit_max_value) {
+ this.max_value = value;
+ this._isValid = true;
+ var changes = {};
+ changes[this.nodeOptions.max_value] = this.max_value;
+ this.trigger_up('field_changed', {
+ dataPointID: this.dataPointID,
+ changes: changes,
+ });
+ } else {
+ // _setValues accepts string and will parse it
+ var formattedValue = this._formatValue(value);
+ this._setValue(formattedValue);
}
},
on_change_input: function (e) {
@@ -2604,29 +2627,42 @@ var FieldProgressBar = AbstractField.extend({
if (e.type === 'change' && !$input.is(':focus')) {
return;
}
- if (isNaN($input.val())) {
- this.do_warn(_t("Wrong value entered!"), _t("Only Integer Value should be valid."));
- } else {
- if (e.type === 'input') {
- this._render_value($input.val());
- if (parseFloat($input.val()) === 0) {
+
+ var parsedValue;
+ try {
+ // Cover all numbers with parseFloat
+ parsedValue = field_utils.parse.float($input.val());
+ } catch (error) {
+ this.do_warn(_t("Wrong value entered!"), _t("Only Integer or Float Value should be valid."));
+ }
+
+ if (parsedValue !== undefined) {
+ if (e.type === 'input') { // ensure what has just been typed in the input is a number
+ // returns NaN if not a number
+ this._render_value(parsedValue);
+ if (parsedValue === 0) {
$input.select();
}
- } else {
+ } else { // Implicit type === 'blur': we commit the value
if (this.edit_max_value) {
- this.max_value = $(e.target).val();
- } else {
- this.value = $(e.target).val() || 0;
+ parsedValue = parsedValue || 100;
}
+
var $div = $('<div>', {class: 'o_progressbar_value'});
this.$('.o_progressbar_value').replaceWith($div);
this.write_mode = false;
+ this.on_update(parsedValue);
this._render_value();
- this.on_update(this.edit_max_value ? this.max_value : this.value);
}
}
},
+ /**
+ * Renders the value
+ *
+ * @private
+ * @param {Number} v
+ */
_render_value: function (v) {
var value = this.value;
var max_value = this.max_value;
diff --git a/addons/web/static/src/js/fields/relational_fields.js b/addons/web/static/src/js/fields/relational_fields.js
index b2d3379aef1..b89900c9b3b 100644
--- a/addons/web/static/src/js/fields/relational_fields.js
+++ b/addons/web/static/src/js/fields/relational_fields.js
@@ -397,8 +397,10 @@ var FieldMany2One = AbstractField.extend({
kanban_view_ref: this.attrs.kanban_view_ref,
on_selected: function (records) {
self.reinitialize(records[0]);
+ },
+ on_closed: function () {
self.activate();
- }
+ },
};
},
/**
@@ -650,7 +652,6 @@ var FieldMany2One = AbstractField.extend({
* in the dialog (each filter has keys 'description' and 'domain')
*/
_searchCreatePopup: function (view, ids, context, dynamicFilters) {
- var self = this;
var options = this._getSearchCreatePopupOptions(view, ids, context, dynamicFilters);
return new dialogs.SelectCreateDialog(this, _.extend({}, this.nodeOptions, options)).open();
},
@@ -820,6 +821,46 @@ var Many2oneBarcode = FieldMany2One.extend({
});
var ListFieldMany2One = FieldMany2One.extend({
+ events: _.extend({}, FieldMany2One.prototype.events, {
+ 'focusin input': '_onInputFocusin',
+ }),
+
+ /**
+ * @override
+ */
+ init: function () {
+ this._super.apply(this, arguments);
+ // when we empty the input, we delay the setValue to prevent from
+ // triggering the 'fieldChanged' event twice when the user wants set
+ // another m2o value ; the following attribute is used to determine when
+ // we skipped the setValue, s.t. we can perform it later on if the user
+ // didn't select another value
+ this.mustSetValue = false;
+ this.m2oDialogFocused = false;
+ },
+
+ //--------------------------------------------------------------------------
+ // Public
+ //--------------------------------------------------------------------------
+
+ /**
+ * If in readonly, will never be considered as an active widget.
+ *
+ * @override
+ */
+ activate: function () {
+ if (this.mode === 'readonly') {
+ return false;
+ }
+ return this._super.apply(this, arguments);
+ },
+ /**
+ * @override
+ */
+ reinitialize: function () {
+ this.mustSetValue = false;
+ return this._super.apply(this, arguments);
+ },
//--------------------------------------------------------------------------
// Private
@@ -831,6 +872,52 @@ var ListFieldMany2One = FieldMany2One.extend({
_renderReadonly: function () {
this.$el.text(this.m2o_value);
},
+ /**
+ * @override
+ * @private
+ */
+ _searchCreatePopup: function () {
+ this.m2oDialogFocused = true;
+ return this._super.apply(this, arguments);
+ },
+
+ //--------------------------------------------------------------------------
+ // Handlers
+ //--------------------------------------------------------------------------
+
+ /**
+ * @private
+ */
+ _onInputFocusin: function () {
+ this.m2oDialogFocused = false;
+ },
+ /**
+ * In list views, we don't want to try to trigger a fieldChange when the field
+ * is being emptied. Instead, it will be triggered as the user leaves the field
+ * while it is empty.
+ *
+ * @override
+ * @private
+ */
+ _onInputFocusout: function () {
+ this._super.apply(this, arguments);
+ if (!this.m2oDialogFocused && this.$input.val() === "" && this.mustSetValue) {
+ this.reinitialize(false);
+ }
+ },
+ /**
+ * Prevents the triggering of an immediate _onFieldChanged when emptying the field.
+ *
+ * @override
+ * @private
+ */
+ _onInputKeyup: function () {
+ if (this.$input.val() !== "") {
+ this._super.apply(this, arguments);
+ } else {
+ this.mustSetValue = true;
+ }
+ },
});
var KanbanFieldMany2One = AbstractField.extend({
@@ -2199,13 +2286,16 @@ var FieldMany2ManyTags = AbstractField.extend({
this.many2one._getSearchCreatePopupOptions = function (view, ids, context, dynamicFilters) {
var options = _getSearchCreatePopupOptions.apply(this, arguments);
var domain = this.record.getDomain({fieldName: this.name});
+ var m2mRecords = [];
return _.extend({}, options, {
domain: domain.concat(["!", ["id", "in", self.value.res_ids]]),
disable_multiple_selection: false,
on_selected: function (records) {
- self.many2one.reinitialize(records);
- self.many2one.activate();
- }
+ m2mRecords.push(...records);
+ },
+ on_closed: function () {
+ self.many2one.reinitialize(m2mRecords);
+ },
});
};
return this.many2one.appendTo(this.$el);
@@ -2291,7 +2381,7 @@ var FieldMany2ManyTagsAvatar = FieldMany2ManyTags.extend({
_getRenderTagsContext: function () {
var result = this._super.apply(this, arguments);
result.avatarModel = this.nodeOptions.avatarModel || this.field.relation;
- result.avatarField = this.nodeOptions.avatarField || 'image_64';
+ result.avatarField = this.nodeOptions.avatarField || 'image_128';
return result;
},
});
diff --git a/addons/web/static/src/js/views/abstract_controller.js b/addons/web/static/src/js/views/abstract_controller.js
index cb83301c14d..43a485fb009 100644
--- a/addons/web/static/src/js/views/abstract_controller.js
+++ b/addons/web/static/src/js/views/abstract_controller.js
@@ -19,6 +19,8 @@ var config = require('web.config');
var core = require('web.core');
var mvc = require('web.mvc');
+var session = require('web.session');
+
var QWeb = core.qweb;
var AbstractController = mvc.Controller.extend(ActionMixin, {
@@ -519,6 +521,7 @@ var AbstractController = mvc.Controller.extend(ActionMixin, {
this.dp.add(this._rpc({
model: data.model,
method: data.method,
+ context: session.user_context,
})).then(function (action) {
if (action !== undefined) {
self.do_action(action, options);
diff --git a/addons/web/static/src/js/views/abstract_view.js b/addons/web/static/src/js/views/abstract_view.js
index d581f84308a..7dc3cc30563 100644
--- a/addons/web/static/src/js/views/abstract_view.js
+++ b/addons/web/static/src/js/views/abstract_view.js
@@ -91,8 +91,8 @@ var AbstractView = Factory.extend({
* @param {Array[]} [params.searchQuery.domain=[]]
* @param {string[]} [params.searchQuery.groupBy=[]]
* @param {Object} [params.userContext={}]
- * @param {boolean} [params.withControlPanel=true]
- * @param {boolean} [params.withSearchPanel=true]
+ * @param {boolean} [params.withControlPanel=AbstractView.prototype.withControlPanel]
+ * @param {boolean} [params.withSearchPanel=AbstractView.prototype.withSearchPanel]
*/
init: function (viewInfo, params) {
this._super.apply(this, arguments);
@@ -115,7 +115,9 @@ var AbstractView = Factory.extend({
this.fields = this.fieldsView.viewFields;
this.userContext = params.userContext || {};
this.withControlPanel = this.withControlPanel && params.withControlPanel;
- this.withSearchPanel = this.withSearchPanel && this.multi_record && params.withSearchPanel;
+ const searchPanelDisabled = 'search_panel' in params.context && !params.search_panel;
+ this.withSearchPanel = this.withSearchPanel && this.multi_record &&
+ params.withSearchPanel && !searchPanelDisabled;
// the boolean parameter 'isEmbedded' determines if the view should be
// considered as a subview. For now this is only used by the graph
@@ -187,6 +189,9 @@ var AbstractView = Factory.extend({
withSearchBar: params.withSearchBar,
};
this.searchPanelParams = {
+ defaultNoFilter: params.searchPanelDefaultNoFilter,
+ fields: this.fields,
+ model: this.loadParams.modelName,
state: controllerState.spState,
};
},
@@ -292,15 +297,12 @@ var AbstractView = Factory.extend({
}
});
var controlPanelDomain = this.loadParams.domain;
- var searchPanel = new this.config.SearchPanel(parent, {
+ var spParams = _.extend({}, this.searchPanelParams, {
defaultValues: defaultValues,
- fields: this.fields,
- model: this.loadParams.modelName,
searchDomain: controlPanelDomain,
- sections: this.searchPanelParams.sections,
- state: this.searchPanelParams.state,
classes: params.classes || [],
});
+ var searchPanel = new this.config.SearchPanel(parent, spParams);
this.controllerParams.searchPanel = searchPanel;
this.controllerParams.controlPanelDomain = controlPanelDomain;
await searchPanel.appendTo(document.createDocumentFragment());
diff --git a/addons/web/static/src/js/views/basic/basic_model.js b/addons/web/static/src/js/views/basic/basic_model.js
index 2d239520dfb..4b4d02c2755 100644
--- a/addons/web/static/src/js/views/basic/basic_model.js
+++ b/addons/web/static/src/js/views/basic/basic_model.js
@@ -1199,7 +1199,7 @@ var BasicModel = AbstractModel.extend({
if (!_.isEmpty(action)) {
return self.do_action(action, {
on_close: function () {
- return self.reload(parentID);
+ return self.trigger_up('reload');
}
});
} else {
@@ -1231,7 +1231,7 @@ var BasicModel = AbstractModel.extend({
if (!_.isEmpty(action)) {
return self.do_action(action, {
on_close: function () {
- return self.reload(parentID);
+ return self.trigger_up('reload');
}
});
} else {
@@ -1263,7 +1263,7 @@ var BasicModel = AbstractModel.extend({
if (!_.isEmpty(action)) {
return self.do_action(action, {
on_close: function () {
- return self.reload(parentID);
+ return self.trigger_up('reload');
}
});
} else {
diff --git a/addons/web/static/src/js/views/calendar/calendar_view.js b/addons/web/static/src/js/views/calendar/calendar_view.js
index 232a7316fa5..1b081316f20 100644
--- a/addons/web/static/src/js/views/calendar/calendar_view.js
+++ b/addons/web/static/src/js/views/calendar/calendar_view.js
@@ -105,7 +105,7 @@ var CalendarView = AbstractView.extend({
};
if (fields[fieldName].relation) {
if (['res.users', 'res.partner', 'hr.employee'].indexOf(fields[fieldName].relation) !== -1) {
- filters[fieldName].avatar_field = 'image_64';
+ filters[fieldName].avatar_field = 'image_128';
}
filters[fieldName].avatar_model = fields[fieldName].relation;
}
diff --git a/addons/web/static/src/js/views/control_panel/control_panel_renderer.js b/addons/web/static/src/js/views/control_panel/control_panel_renderer.js
index 677f0733bc5..bdde2827e96 100644
--- a/addons/web/static/src/js/views/control_panel/control_panel_renderer.js
+++ b/addons/web/static/src/js/views/control_panel/control_panel_renderer.js
@@ -50,6 +50,7 @@ var ControlPanelRenderer = Renderer.extend({
this.$subMenus = null;
this.action = params.action;
this.displaySearchMenu = true;
+ this.isMobile = config.device.isMobile;
this.menusSetup = false;
this.searchMenuTypes = params.searchMenuTypes || [];
this.subMenus = {};
diff --git a/addons/web/static/src/js/views/control_panel/mobile_control_panel_renderer.js b/addons/web/static/src/js/views/control_panel/mobile_control_panel_renderer.js
index 23852abcf53..95b5c577587 100644
--- a/addons/web/static/src/js/views/control_panel/mobile_control_panel_renderer.js
+++ b/addons/web/static/src/js/views/control_panel/mobile_control_panel_renderer.js
@@ -9,9 +9,9 @@ if (!config.device.isMobile) {
}
ControlPanelRenderer.include({
- template:'MobileControlPanel',
events:_.extend({}, ControlPanelRenderer.prototype.events, {
- 'click .o_mobile_search_close, .o_mobile_search_show_result, .o_enable_searchview': '_toggleMobileSearchView',
+ 'click .o_mobile_search_close, .o_mobile_search_show_result, .o_toggle_searchview_full': '_toggleMobileSearchView',
+ 'click .o_enable_searchview': '_toggleMobileQuickSearchView',
'click': '_onOpenMobileSearchView',
'click .o_mobile_search_clear_facets': '_onEmptyAll',
'show.bs.dropdown .o_mobile_search_filter .o_dropdown': '_onDropdownToggle',
@@ -49,17 +49,40 @@ ControlPanelRenderer.include({
_renderSearchBar: function () {
var self = this;
return this._super.apply(this, arguments).then(function () {
- self.searchBar.$el.detach().insertAfter(self.$('.o_mobile_search_header'));
+ self._renderSearchviewInput();
});
},
+ _renderSearchviewInput: function () {
+ if (this.$('.o_toggle_searchview_full').is(':visible') && !this.$('.o_mobile_search').is(':visible')) {
+ this.$('.o_toggle_searchview_full').toggleClass('btn-secondary', !!this.state.query.length);
+ this.searchBar.$el.detach().insertAfter(this.$('.o_mobile_search'));
+ } else {
+ this.searchBar.$el.detach().insertAfter(this.$('.o_mobile_search_header'));
+ }
+ },
/**
* Toggles mobile search view screen.
*
* @private
*/
_toggleMobileSearchView: function () {
- this.$('.o_enable_searchview').toggleClass('btn-secondary', !!this.state.query.length);
this.$('.o_mobile_search').toggleClass('o_hidden');
+ this._renderSearchviewInput();
+ },
+ /**
+ * Toggles mobile quick search view on screen.
+ *
+ * @private
+ */
+ _toggleMobileQuickSearchView: function () {
+ this.$('.o_cp_searchview').toggleClass('o_searchview_quick');
+ this.$('.breadcrumb').toggleClass('o_hidden',
+ this.$('.o_cp_searchview').hasClass('o_searchview_quick'));
+ this.$('.o_toggle_searchview_full')
+ .toggleClass('o_hidden')
+ .toggleClass('btn-secondary', !!this.state.query.length);
+ this._renderSearchviewInput();
+ this.$('.o_enable_searchview').toggleClass("fa-search").toggleClass("fa-close");
},
//--------------------------------------------------------------------------
diff --git a/addons/web/static/src/js/views/control_panel/search/search_bar.js b/addons/web/static/src/js/views/control_panel/search/search_bar.js
index 3f58fcdce2a..42b156beed7 100644
--- a/addons/web/static/src/js/views/control_panel/search/search_bar.js
+++ b/addons/web/static/src/js/views/control_panel/search/search_bar.js
@@ -9,6 +9,8 @@ var Widget = require('web.Widget');
var SearchBar = Widget.extend({
template: 'SearchView.SearchBar',
events: _.extend({}, Widget.prototype.events, {
+ 'compositionend .o_searchview_input': '_onCompositionendInput',
+ 'compositionstart .o_searchview_input': '_onCompositionstartInput',
'keydown': '_onKeydown',
}),
/**
@@ -32,6 +34,7 @@ var SearchBar = Widget.extend({
this.autoCompleteSources = [];
this.searchFacets = [];
+ this._isInputComposing = false;
},
/**
* @override
@@ -200,10 +203,27 @@ var SearchBar = Widget.extend({
}
},
/**
+ * @rivate
+ * @param {CompositionEvent} ev
+ */
+ _onCompositionendInput: function () {
+ this._isInputComposing = false;
+ },
+ /**
+ * @rivate
+ * @param {CompositionEvent} ev
+ */
+ _onCompositionstartInput: function () {
+ this._isInputComposing = true;
+ },
+ /**
* @private
* @param {KeyEvent} e
*/
_onKeydown: function (e) {
+ if (this._isInputComposing) {
+ return;
+ }
switch(e.which) {
case $.ui.keyCode.LEFT:
this._focusPreceding();
diff --git a/addons/web/static/src/js/views/control_panel/search/search_facet.js b/addons/web/static/src/js/views/control_panel/search/search_facet.js
index 917d42b7e41..22d957c030b 100644
--- a/addons/web/static/src/js/views/control_panel/search/search_facet.js
+++ b/addons/web/static/src/js/views/control_panel/search/search_facet.js
@@ -10,6 +10,8 @@ var SearchFacet = Widget.extend({
template: 'SearchView.SearchFacet',
events: _.extend({}, Widget.prototype.events, {
'click .o_facet_remove': '_onFacetRemove',
+ 'compositionend': '_onCompositionend',
+ 'compositionstart': '_onCompositionstart',
'keydown': '_onKeydown',
}),
/**
@@ -26,6 +28,7 @@ var SearchFacet = Widget.extend({
});
this.separator = this._getSeparator();
this.icon = this._getIcon();
+ this._isComposing = false;
},
//--------------------------------------------------------------------------
@@ -130,6 +133,20 @@ var SearchFacet = Widget.extend({
/**
* @private
+ * @param {CompositionEvent} ev
+ */
+ _onCompositionend: function (ev) {
+ this._isComposing = false;
+ },
+ /**
+ * @private
+ * @param {CompositionEvent} ev
+ */
+ _onCompositionstart: function (ev) {
+ this._isComposing = true;
+ },
+ /**
+ * @private
*/
_onFacetRemove: function () {
this.trigger_up('facet_removed', {group: this.facet});
@@ -139,6 +156,9 @@ var SearchFacet = Widget.extend({
* @param {KeyboardEvent} ev
*/
_onKeydown: function (ev) {
+ if (this._isComposing) {
+ return;
+ }
switch (ev.which) {
case $.ui.keyCode.BACKSPACE:
this.trigger_up('facet_removed', {group: this.facet});
diff --git a/addons/web/static/src/js/views/graph/graph_controller.js b/addons/web/static/src/js/views/graph/graph_controller.js
index 2953b99f731..1c580a25bd6 100644
--- a/addons/web/static/src/js/views/graph/graph_controller.js
+++ b/addons/web/static/src/js/views/graph/graph_controller.js
@@ -177,7 +177,7 @@ var GraphController = AbstractController.extend(GroupByMenuMixin,{
.find('.o_graph_button[data-mode="stack"]')
.data('stacked', state.stacked)
.toggleClass('active', state.stacked)
- .toggleClass('o_hidden', state.mode !== 'bar' || !this.renderer.isStackable);
+ .toggleClass('o_hidden', state.mode !== 'bar');
_.each(this.$measureList.find('.dropdown-item'), function (item) {
var $item = $(item);
$item.toggleClass('selected', $item.data('field') === state.measure);
diff --git a/addons/web/static/src/js/views/graph/graph_renderer.js b/addons/web/static/src/js/views/graph/graph_renderer.js
index e24de02879c..6cb2c023d0e 100644
--- a/addons/web/static/src/js/views/graph/graph_renderer.js
+++ b/addons/web/static/src/js/views/graph/graph_renderer.js
@@ -71,8 +71,6 @@ return AbstractRenderer.extend({
this.chart = null;
this.chartId = _.uniqueId('chart');
- // the bar charts are considered stackable a priori
- this.isStackable = true;
this.$legendTooltip = null;
this.$tooltip = null;
},
@@ -782,34 +780,9 @@ return AbstractRenderer.extend({
// prepare data
var data = this._prepareData(dataPoints);
- // The datapoints (with non zero value) can be grouped by
- // their originIndex and associated labels.
- // If at least one group formed in that way has two elements
- // this.isStackable will be true.
- var groupMemberCounts = data.labels.map(function () {
- return {};
- });
- this.isStackable = false;
- for (var i = 0; i < data.datasets.length; i++) {
- var dataset = data.datasets[i];
- var originIndex = dataset.originIndex;
- if (this.isStackable) {
- break;
- }
- for (var j = 0; j < dataset.data.length; j++) {
- if (dataset.data[j]) {
- if (originIndex in groupMemberCounts[j]) {
- this.isStackable = true;
- break;
- } else {
- groupMemberCounts[j][originIndex] = 1;
- }
- }
- }
- }
data.datasets.forEach(function (dataset, index) {
// used when stacked
- dataset.stack = self.isStackable && self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
+ dataset.stack = self.state.stacked ? self.state.origins[dataset.originIndex] : undefined;
// set dataset color
var color = self._getColor(index);
dataset.backgroundColor = color;
diff --git a/addons/web/static/src/js/views/list/list_controller.js b/addons/web/static/src/js/views/list/list_controller.js
index 5ec42156000..4e0060fa5ff 100644
--- a/addons/web/static/src/js/views/list/list_controller.js
+++ b/addons/web/static/src/js/views/list/list_controller.js
@@ -8,20 +8,78 @@ odoo.define('web.ListController', function (require) {
*/
var core = require('web.core');
+var session = require('web.session');
+var framework = require('web.framework');
var BasicController = require('web.BasicController');
var DataExport = require('web.DataExport');
var Dialog = require('web.Dialog');
+var fieldUtils = require('web.field_utils');
var Sidebar = require('web.Sidebar');
var _t = core._t;
var qweb = core.qweb;
+/**
+ * Return data required for exporting the current list to a xls file.
+ * Recursive if some groups are nested.
+ * Note: this function is also used when the records are not grouped.
+ * In this scenario, an artificial single group with every record in
+ * the list is built.
+ * @param {Array} groups
+ * @param {Array} displayedFields
+ * @param {Array} allFields
+ * @returns {Array} list of groups with the following structure:
+ * 'data': list of records or list of sub-groups
+ * 'isGrouped': true if data contains sub-groups
+ * 'value': title of the group
+ * 'count': number of records in the group
+ * 'aggregateValues': dict container aggregated values of fields {field: aggregatedValue, ...}
+ * 'hideHeader': self explanatory, used when the records are not grouped at all.
+ */
+var processGroups = (groups, displayedFields, allFields) => {
+ let formatRecord = record => {
+ let data = _.pick(record.data, displayedFields)
+ let formattedData = {}
+
+ Object.entries(data).forEach(([field_name, value]) => {
+ let field = allFields[field_name]
+ let formattedValue = fieldUtils.format[field.type](value, field, {data: record.data, forceString: true})
+ formattedData[field_name] = formattedValue.replace('&nbsp;', '')
+ });
+ return formattedData
+ }
+
+ if (groups.length && groups[0].groupedBy && groups[0].groupedBy.length) {
+ // Recursively process sub-group
+ return groups.map(group => ({
+ hideHeader: !!group.hideHeader,
+ isGrouped: true,
+ value: group.value !== undefined && group.value.toString() || _t("Undefined"),
+ count: group.count,
+ aggregateValues: _.pick(group.aggregateValues, displayedFields),
+ data: processGroups(group.data, displayedFields, allFields),
+ }))
+ }
+ // process records
+ return groups.map(group => ({
+ hideHeader: !!group.hideHeader,
+ isGrouped: false,
+ value: group.value !== undefined && group.value.toString() || _t("Undefined"),
+ count: group.count,
+ aggregateValues: _.pick(group.aggregateValues, displayedFields),
+ data: group.data.map(formatRecord)
+ }))
+}
+
var ListController = BasicController.extend({
/**
* This key contains the name of the buttons template to render on top of
* the list view. It can be overridden to add buttons in specific child views.
*/
buttons_template: 'ListView.buttons',
+ events: _.extend({}, BasicController.prototype.events, {
+ 'click .o_list_download': '_onExportRecords',
+ }),
custom_events: _.extend({}, BasicController.prototype.custom_events, {
activate_next_widget: '_onActivateNextWidget',
add_record: '_onAddRecord',
@@ -50,6 +108,10 @@ var ListController = BasicController.extend({
this.noLeaf = params.noLeaf;
this.selectedRecords = params.selectedRecords || [];
this.multipleRecordsSavingPromise = null;
+ this.fieldChangedPrevented = false;
+ this.activeActions = _.extend({}, this.activeActions, {
+ download: this.renderer.arch.attrs.download ? !!JSON.parse(this.renderer.arch.attrs.download) : true,
+ });
},
//--------------------------------------------------------------------------
@@ -134,6 +196,7 @@ var ListController = BasicController.extend({
},
trigger: 'manual',
});
+ this.$buttons.on('mousedown', '.o_list_button_discard', this._onDiscardMousedown.bind(this));
this.$buttons.on('click', '.o_list_button_discard', this._onDiscard.bind(this));
this.$buttons.appendTo($node);
}
@@ -339,6 +402,31 @@ var ListController = BasicController.extend({
});
},
/**
+ * Export the current list data in a xls file.
+ *
+ * @private
+ */
+ _downloadList() {
+ let groups = this.renderer.state.data
+ groups = this.renderer.isGrouped ? groups : [{data: groups, count: groups.length, hideHeader: true}] // Artificial single group
+
+ let allFields = this.renderer.state.fields
+ let columns = this.renderer.columns.map(column => ({
+ field: column.attrs.name,
+ aggregateValue: column.aggregate && column.aggregate.value,
+ string: allFields[column.attrs.name].string,
+ }))
+
+ groups = processGroups(groups, columns.map(c => c.field), allFields)
+
+ return session.get_file({
+ url: '/web/list/export_xls',
+ data: {data: JSON.stringify({columns, groups, title: this._title})},
+ complete: framework.unblockUI,
+ error: (error) => this.call('crash_manager', 'rpc_error', error),
+ });
+ },
+ /**
* @override
* @private
*/
@@ -371,6 +459,7 @@ var ListController = BasicController.extend({
*/
_saveMultipleRecords: function (recordId, node, changes) {
var self = this;
+ var fieldName = Object.keys(changes)[0];
var value = Object.values(changes)[0];
var recordIds = _.union([recordId], this.selectedRecords);
var validRecordIds = recordIds.reduce(function (result, nextRecordId) {
@@ -388,6 +477,7 @@ var ListController = BasicController.extend({
this.model.discardChanges(recordId);
return this._confirmSave(recordId).then(reject);
};
+ let dialog;
if (validRecordIds.length > 0) {
let message;
if (nbInvalid === 0) {
@@ -399,13 +489,13 @@ var ListController = BasicController.extend({
_t("Do you want to set the value on the %d valid selected records? (%d invalid)"),
validRecordIds.length, nbInvalid);
}
- Dialog.confirm(this, message, {
+ dialog = Dialog.confirm(this, message, {
confirm_callback: () => {
- this.model.saveRecords(recordId, validRecordIds)
- .then(() => {
+ return this.model.saveRecords(recordId, validRecordIds, fieldName)
+ .then(async () => {
this._updateButtons('readonly');
const state = this.model.get(this.handle);
- this.renderer.updateState(state, {keepWidths: true});
+ await this.renderer.updateState(state, {keepWidths: true});
resolve(Object.keys(changes));
})
.guardedCatch(rejectAndDiscard);
@@ -413,10 +503,17 @@ var ListController = BasicController.extend({
cancel_callback: rejectAndDiscard,
});
} else {
- Dialog.alert(this, _t("No valid record to save"), {
+ dialog = Dialog.alert(this, _t("No valid record to save"), {
confirm_callback: rejectAndDiscard,
});
}
+ dialog.on('closed', this, async () => {
+ // we need to wait for the dialog to be actually closed, but
+ // the 'closed' event is triggered just before, and it prevents
+ // from focussing the cell
+ await Promise.resolve();
+ this.renderer.focusCell(recordId, node);
+ });
});
},
/**
@@ -587,6 +684,28 @@ var ListController = BasicController.extend({
this._discardChanges();
},
/**
+ * Used to detect if the discard button is about to be clicked.
+ * Some focusout events might occur and trigger a save which
+ * is not always wanted when clicking "Discard".
+ *
+ * @param {MouseEvent} ev
+ * @private
+ */
+ _onDiscardMousedown: function (ev) {
+ var self = this;
+ this.fieldChangedPrevented = true;
+ window.addEventListener('mouseup', function (mouseupEvent) {
+ var preventedEvent = self.fieldChangedPrevented;
+ self.fieldChangedPrevented = false;
+ // If the user starts clicking (mousedown) on the button and stops clicking
+ // (mouseup) outside of the button, we want to trigger the original onFieldChanged
+ // Event that was prevented in the meantime.
+ if (ev.target !== mouseupEvent.target && preventedEvent.constructor.name === 'OdooEvent') {
+ self._onFieldChanged(preventedEvent);
+ }
+ }, { capture: true, once: true });
+ },
+ /**
* Called when the user asks to edit a row -> Updates the controller buttons
*
* @param {OdooEvent} ev
@@ -614,6 +733,14 @@ var ListController = BasicController.extend({
new DataExport(this, record, defaultExportFields).open();
},
/**
+ * Export Records in a xls file
+ *
+ * @private
+ */
+ _onExportRecords() {
+ this._downloadList()
+ },
+ /**
* Opens the related form view.
*
* @private
@@ -643,15 +770,16 @@ var ListController = BasicController.extend({
ev.stopPropagation();
const recordId = ev.data.dataPointID;
- if (this.renderer.inMultipleRecordEdition(recordId)) {
+ if (this.fieldChangedPrevented) {
+ this.fieldChangedPrevented = ev;
+ } else if (this.renderer.inMultipleRecordEdition(recordId)) {
// deal with edition of multiple lines
- const _onSuccess = ev.data.onSuccess;
ev.data.onSuccess = () => {
- Promise.resolve(_onSuccess()).then(() => {
- const savedRecordsPromise = this._saveMultipleRecords(ev.data.dataPointID, ev.target.__node, ev.data.changes);
- this.multipleRecordsSavingPromise = savedRecordsPromise;
- });
+ this.multipleRecordsSavingPromise =
+ this._saveMultipleRecords(ev.data.dataPointID, ev.target.__node, ev.data.changes);
};
+ // disable onchanges as we'll save directly
+ ev.data.notifyChange = false;
}
this._super.apply(this, arguments);
},
@@ -678,6 +806,29 @@ var ListController = BasicController.extend({
this._toggleSidebar();
},
/**
+ * If the record is set as dirty while in multiple record edition,
+ * we want to immediatly discard the change.
+ *
+ * @private
+ * @override
+ * @param {OdooEvent} ev
+ */
+ _onSetDirty: function (ev) {
+ var self = this;
+ var recordId = ev.data.dataPointID;
+ if (this.renderer.inMultipleRecordEdition(recordId)) {
+ ev.stopPropagation();
+ Dialog.alert(this, _t("No valid record to save"), {
+ confirm_callback: function () {
+ self.model.discardChanges(recordId);
+ self._confirmSave(recordId);
+ },
+ });
+ } else {
+ this._super.apply(this, arguments);
+ }
+ },
+ /**
* When the user clicks on one of the sortable column headers, we need to
* tell the model to sort itself properly, to update the pager and to
* rerender the view.
diff --git a/addons/web/static/src/js/views/list/list_editable_renderer.js b/addons/web/static/src/js/views/list/list_editable_renderer.js
index d9cc1115917..6f21653b70c 100644
--- a/addons/web/static/src/js/views/list/list_editable_renderer.js
+++ b/addons/web/static/src/js/views/list/list_editable_renderer.js
@@ -19,6 +19,7 @@ var utils = require('web.utils');
var _t = core._t;
ListRenderer.include({
+ RESIZE_DELAY: 200,
custom_events: _.extend({}, ListRenderer.prototype.custom_events, {
navigation_move: '_onNavigationMove',
}),
@@ -109,6 +110,7 @@ ListRenderer.include({
start: function () {
if (this.editable) {
core.bus.on('click', this, this._onWindowClicked.bind(this));
+ core.bus.on('resize', this, _.debounce(this._onResize.bind(this), this.RESIZE_DELAY));
}
return this._super();
},
@@ -320,6 +322,17 @@ ListRenderer.include({
this._selectCell(rowIndex, 0);
},
/**
+ * Gives focus to a specific cell, given its row and its related column.
+ *
+ * @param {string} recordId
+ * @param {Object} column
+ */
+ focusCell: function (recordId, column) {
+ var $row = this._getRow(recordId);
+ var cellIndex = this.columns.indexOf(column);
+ $row.find('.o_data_cell')[cellIndex].focus();
+ },
+ /**
* Returns the recordID associated to the line which is currently in edition
* or null if there is no line in edition.
*
@@ -339,9 +352,7 @@ ListRenderer.include({
* @returns {boolean}
*/
inMultipleRecordEdition: function (recordId) {
- const record = this._getRecord(recordId) || {};
- const recordIds = [...new Set([recordId, ...this.selection])];
- return this.editable && recordIds.length > 1 && record.res_id;
+ return this.editable && this.selection.length > 1 && this.selection.includes(recordId);
},
/**
* Removes the line associated to the given recordID (the index of the row
@@ -358,6 +369,7 @@ ListRenderer.include({
}
if ($row.prop('rowIndex') - 1 === this.currentRow) {
this.currentRow = null;
+ this._enableRecordSelectors();
}
// destroy widgets first
@@ -452,7 +464,11 @@ ListRenderer.include({
// Toggle selected class here so that style is applied at the end
$row.toggleClass('o_selected_row', editMode);
- $row.find('.o_list_record_selector input').prop('disabled', !record.res_id);
+ if (editMode) {
+ this._disableRecordSelectors();
+ } else {
+ this._enableRecordSelectors();
+ }
return Promise.all(defs).then(function () {
// necessary to trigger resize on fieldtexts
@@ -494,6 +510,7 @@ ListRenderer.include({
onFailure: reject,
});
}).then(changedFields => {
+ this._enableRecordSelectors();
// If any field has changed and if the list is in multiple edition,
// we send a truthy boolean to _selectRow to tell it not to select
// the following record.
@@ -543,7 +560,14 @@ ListRenderer.include({
el.addEventListener(type, callback, options);
this.eventListeners.push({ type, el, callback, options });
},
-
+ /**
+ * When editing a row, we want to disable all record selectors.
+ *
+ * @private
+ */
+ _disableRecordSelectors: function () {
+ this.$('.o_list_record_selector input').attr('disabled', 'disabled');
+ },
/**
* Destroy all field widgets corresponding to a record. Useful when we are
* removing a useless row.
@@ -558,6 +582,12 @@ ListRenderer.include({
}
},
/**
+ * @private
+ */
+ _enableRecordSelectors: function () {
+ this.$('.o_list_record_selector input').attr('disabled', false);
+ },
+ /**
* This function freezes the column widths and forces a fixed table-layout,
* once the browser has computed the optimal width of each column according
* to the displayed records. We want to freeze widths s.t. it doesn't
@@ -581,9 +611,18 @@ ListRenderer.include({
const table = this.el.getElementsByTagName('table')[0];
const thead = table.getElementsByTagName('thead')[0];
+ // Set table layout auto and remove inline style to make sure that css
+ // rules apply (e.g. fixed width of record selector)
+ table.style.tableLayout = 'auto';
+ [...table.getElementsByTagName('th')].forEach((th) => {
+ th.style.width = null;
+ });
+
// Freeze each th width according to their size in auto layout
- [...thead.getElementsByTagName('th')].forEach((th, index) => {
- th.style.width = `${this.columnWidths ? this.columnWidths[index] : th.offsetWidth}px`;
+ const thElements = [...thead.getElementsByTagName('th')];
+ const thWidths = thElements.map((th) => th.offsetWidth);
+ thElements.forEach((th, index) => {
+ th.style.width = `${this.columnWidths ? this.columnWidths[index] : thWidths[index]}px`;
});
// Set the table layout to fixed
@@ -639,6 +678,7 @@ ListRenderer.include({
return fixedWidths[type] || '1';
},
/**
+ * @private
*
* @returns {integer}
*/
@@ -1195,7 +1235,10 @@ ListRenderer.include({
return new Promise(function (resolve) {
self.trigger_up('edit_line', {
recordId: recordId,
- onSuccess: resolve,
+ onSuccess: function () {
+ self._disableRecordSelectors();
+ resolve();
+ },
});
});
});
@@ -1386,6 +1429,7 @@ ListRenderer.include({
this.trigger_up('discard_changes', {
recordID: ev.target.dataPointID,
onSuccess: function () {
+ self._enableRecordSelectors();
var recordId = self._getRecordID(rowIndex);
if (recordId) {
var correspondingRow = self._getRow(recordId);
@@ -1420,6 +1464,15 @@ ListRenderer.include({
}
},
/**
+ * React to window resize events by recomputing the width of each column.
+ *
+ * @private
+ */
+ _onResize: function () {
+ this.columnWidths = false;
+ this._freezeColumnWidths();
+ },
+ /**
* If the list view editable, just let the event bubble. We don't want to
* open the record in this case anyway.
*
diff --git a/addons/web/static/src/js/views/list/list_model.js b/addons/web/static/src/js/views/list/list_model.js
index 900f3764b0e..65526346c8e 100644
--- a/addons/web/static/src/js/views/list/list_model.js
+++ b/addons/web/static/src/js/views/list/list_model.js
@@ -40,12 +40,18 @@ odoo.define('web.ListModel', function (require) {
* @param {string} referenceRecordId the record datapoint used to
* generate the changes to apply to recordIds
* @param {string[]} recordIds a list of record datapoint ids
+ * @param {string} fieldName the field to write
*/
- saveRecords: function (referenceRecordId, recordIds) {
+ saveRecords: function (referenceRecordId, recordIds, fieldName) {
var self = this;
var referenceRecord = this.localData[referenceRecordId];
var list = this.localData[referenceRecord.parentID];
- var changes = this._generateChanges(referenceRecord, {});
+ // generate all record values to ensure that we'll write something
+ // (e.g. 2 records selected, edit a many2one in the first one, but
+ // reset same value, we still want to save this value on the other
+ // record)
+ var allChanges = this._generateChanges(referenceRecord, {changesOnly: false});
+ var changes = _.pick(allChanges, fieldName);
var records = recordIds.map(function (recordId) {
return self.localData[recordId];
});
diff --git a/addons/web/static/src/js/views/list/list_renderer.js b/addons/web/static/src/js/views/list/list_renderer.js
index 94609544b10..5daa33125a7 100644
--- a/addons/web/static/src/js/views/list/list_renderer.js
+++ b/addons/web/static/src/js/views/list/list_renderer.js
@@ -996,11 +996,18 @@ var ListRenderer = BasicRenderer.extend({
* @private
*/
_updateSelection: function () {
- var $selectedRows = this.$('tbody .o_list_record_selector input:checked')
- .closest('tr');
- this.selection = _.map($selectedRows, function (row) {
- return $(row).data('id');
+ this.selection = [];
+ var self = this;
+ var $inputs = this.$('tbody .o_list_record_selector input:visible:not(:disabled)');
+ var allChecked = $inputs.length > 0;
+ $inputs.each(function (index, input) {
+ if (input.checked) {
+ self.selection.push($(input).closest('tr').data('id'));
+ } else {
+ allChecked = false;
+ }
});
+ this.$('thead .o_list_record_selector input').prop('checked', allChecked);
this.trigger_up('selection_changed', { selection: this.selection });
this._updateFooter();
},
@@ -1186,9 +1193,6 @@ var ListRenderer = BasicRenderer.extend({
_onSelectRecord: function (ev) {
ev.stopPropagation();
this._updateSelection();
- if (!$(ev.currentTarget).find('input').prop('checked')) {
- this.$('thead .o_list_record_selector input').prop('checked', false);
- }
},
/**
* @private
@@ -1209,7 +1213,8 @@ var ListRenderer = BasicRenderer.extend({
if (group.count) {
this.trigger_up('toggle_group', {
group: group,
- onSuccess: function () {
+ onSuccess: () => {
+ this._updateSelection();
// Refocus the header after re-render unless the user
// already focused something else by now
if (document.activeElement.tagName === 'BODY') {
diff --git a/addons/web/static/src/js/views/pivot/pivot_controller.js b/addons/web/static/src/js/views/pivot/pivot_controller.js
index 47eb5ad49fe..733a812d328 100644
--- a/addons/web/static/src/js/views/pivot/pivot_controller.js
+++ b/addons/web/static/src/js/views/pivot/pivot_controller.js
@@ -13,7 +13,6 @@ odoo.define('web.PivotController', function (require) {
*/
var AbstractController = require('web.AbstractController');
-var config = require('web.config');
var core = require('web.core');
var framework = require('web.framework');
var session = require('web.session');
@@ -115,16 +114,6 @@ var PivotController = AbstractController.extend({
this._updateButtons();
}
},
- /**
- * @override
- * @param {Object} params
- */
- update: function (params) {
- if (config.device.isMobile && params.context) {
- params.context.pivot_column_groupby = [];
- }
- return this._super.apply(this, arguments);
- },
//--------------------------------------------------------------------------
// Private
@@ -218,12 +207,7 @@ var PivotController = AbstractController.extend({
.toggleClass('selected', isSelected);
});
var noDataDisplayed = !state.hasData || !state.measures.length;
- var $flipButton = this.$buttons.find('.o_pivot_flip_button');
- if (config.device.isMobile) {
- $flipButton.toggleClass('o_hidden', true);
- } else {
- $flipButton.prop('disabled', noDataDisplayed);
- }
+ this.$buttons.find('.o_pivot_flip_button').prop('disabled', noDataDisplayed);
this.$buttons.find('.o_pivot_expand_button').prop('disabled', noDataDisplayed);
this.$buttons.find('.o_pivot_download').prop('disabled', noDataDisplayed);
},
diff --git a/addons/web/static/src/js/views/pivot/pivot_renderer.js b/addons/web/static/src/js/views/pivot/pivot_renderer.js
index b74b408c877..3affc975225 100644
--- a/addons/web/static/src/js/views/pivot/pivot_renderer.js
+++ b/addons/web/static/src/js/views/pivot/pivot_renderer.js
@@ -125,10 +125,7 @@ var PivotRenderer = AbstractRenderer.extend({
if (rowIndex > 0) {
cellParams.title = groupbyLabels[rowIndex - 1];
}
- className = 'o_pivot_header_cell';
- if (!config.device.isMobile) {
- className += cell.isLeaf ? '_closed' : '_opened';
- }
+ className = 'o_pivot_header_cell' + (cell.isLeaf ? '_closed' : '_opened');
}
cellParams.class = className;
diff --git a/addons/web/static/src/js/views/pivot/pivot_view.js b/addons/web/static/src/js/views/pivot/pivot_view.js
index 78e7c68cbe6..1b878cf3530 100644
--- a/addons/web/static/src/js/views/pivot/pivot_view.js
+++ b/addons/web/static/src/js/views/pivot/pivot_view.js
@@ -108,7 +108,6 @@ var PivotView = AbstractView.extend({
this.loadParams.default_order = params.default_order || this.arch.attrs.default_order;
if (config.device.isMobile) {
this.loadParams.colGroupBys = [];
- this.loadParams.context.pivot_column_groupby = [];
}
diff --git a/addons/web/static/src/js/views/search_panel.js b/addons/web/static/src/js/views/search_panel.js
index 32bfda12594..4f8c42325db 100644
--- a/addons/web/static/src/js/views/search_panel.js
+++ b/addons/web/static/src/js/views/search_panel.js
@@ -77,6 +77,9 @@ var SearchPanel = Widget.extend({
* @param {Object} params
* @param {Object} [params.defaultValues={}] the value(s) to activate by
* default, for each filter and category
+ * @param {boolean} [params.defaultNoFilter=false] if true, select 'All' as
+ * value for each category that has no value specified in defaultValues
+ * (instead of looking in the localStorage for the last selected value)
* @param {Object} params.fields
* @param {string} params.model
* @param {Array[]} params.searchDomain domain coming from controlPanel
@@ -97,6 +100,12 @@ var SearchPanel = Widget.extend({
this.initialState = params.state;
this.scrollTop = this.initialState && this.initialState.scrollTop || null;
this.defaultValues = params.defaultValues || {};
+ if (params.defaultNoFilter) {
+ Object.keys(this.categories).forEach((categoryId) => {
+ var fieldName = this.categories[categoryId].fieldName;
+ this.defaultValues[fieldName] = this.defaultValues[fieldName] || false;
+ });
+ }
this.fields = params.fields;
this.model = params.model;
this.className = params.classes.concat(['o_search_panel']).join(' ');
@@ -181,7 +190,7 @@ var SearchPanel = Widget.extend({
return {
sections: searchPanelSections,
classes: classes,
- }
+ };
},
/**
* Export the current state (categories and filters) of the searchpanel.
@@ -279,8 +288,9 @@ var SearchPanel = Widget.extend({
});
_.map(values, function (value) {
var value = category.values[value.id];
- if (value.parentId) {
- category.values[value.parentId].childrenIds.push(value.id);
+ var parentCategoryId = value.parentId;
+ if (parentCategoryId && parentCategoryId in category.values) {
+ category.values[parentCategoryId].childrenIds.push(value.id);
}
});
category.rootIds = _.filter(_.map(values, function (value) {
@@ -293,7 +303,6 @@ var SearchPanel = Widget.extend({
// set active value
var validValues = _.pluck(category.values, 'id').concat([false]);
var value = this._getCategoryDefaultValue(category, validValues);
- // if not set in localStorage either, select 'All'
category.activeValueId = _.contains(validValues, value) ? value : false;
// unfold ancestor values of active value to make it is visible
diff --git a/addons/web/static/src/js/views/view_dialogs.js b/addons/web/static/src/js/views/view_dialogs.js
index 130173a16fc..47e3a5309d9 100644
--- a/addons/web/static/src/js/views/view_dialogs.js
+++ b/addons/web/static/src/js/views/view_dialogs.js
@@ -320,6 +320,7 @@ var SelectCreateDialog = ViewDialog.extend({
this._super.apply(this, arguments);
_.defaults(this.options, { initial_view: 'search' });
this.on_selected = this.options.on_selected || (function () {});
+ this.on_closed = this.options.on_closed || (function () {});
this.initialIDs = this.options.initial_ids;
this.viewType = 'list';
},
@@ -395,6 +396,10 @@ var SelectCreateDialog = ViewDialog.extend({
return fragment;
});
},
+ close: function () {
+ this._super.apply(this, arguments);
+ this.on_closed();
+ },
create_edit_record: function () {
var self = this;
var dialog = new FormViewDialog(this, _.extend({}, this.options, {
diff --git a/addons/web/static/src/js/widgets/auto_complete.js b/addons/web/static/src/js/widgets/auto_complete.js
index 1bb00be8d38..30c38690d17 100644
--- a/addons/web/static/src/js/widgets/auto_complete.js
+++ b/addons/web/static/src/js/widgets/auto_complete.js
@@ -29,16 +29,23 @@ return Widget.extend({
this.searching = true;
this.search_string = '';
this.current_search = null;
+ this._isInputComposing = false;
},
start: function () {
var self = this;
+ this.$input.on('compositionend', function (ev) {
+ self._isInputComposing = false;
+ });
+ this.$input.on('compositionstart', function (ev) {
+ self._isInputComposing = true;
+ });
this.$input.on('keyup', function (ev) {
- if (ev.which === $.ui.keyCode.RIGHT) {
+ if (ev.which === $.ui.keyCode.RIGHT && !self._isInputComposing) {
self.searching = true;
ev.preventDefault();
return;
}
- if (ev.which === $.ui.keyCode.ENTER) {
+ if (ev.which === $.ui.keyCode.ENTER && !self._isInputComposing) {
if (self.search_string.length) {
self.select_item(ev);
}
@@ -68,6 +75,9 @@ return Widget.extend({
}
});
this.$input.on('keydown', function (ev) {
+ if (self._isInputComposing) {
+ return;
+ }
switch (ev.which) {
case $.ui.keyCode.ENTER:
diff --git a/addons/web/static/src/js/widgets/date_picker.js b/addons/web/static/src/js/widgets/date_picker.js
index ac8e83c8e30..3f528fe7c37 100644
--- a/addons/web/static/src/js/widgets/date_picker.js
+++ b/addons/web/static/src/js/widgets/date_picker.js
@@ -12,7 +12,6 @@ var DateWidget = Widget.extend({
template: "web.datepicker",
type_of_date: "date",
events: {
- 'change.datetimepicker': 'changeDatetime',
'error.datetimepicker': 'errorDatetime',
'change .o_datepicker_input': 'changeDatetime',
'click input': '_onInputClicked',
@@ -257,6 +256,7 @@ var DateWidget = Widget.extend({
if (this._onScroll) {
window.removeEventListener('scroll', this._onScroll, true);
}
+ this.changeDatetime();
},
/**
* Reacts to the datetimepicker being shown
diff --git a/addons/web/static/src/scss/banner.scss b/addons/web/static/src/scss/banner.scss
index d7237203897..be011d70698 100644
--- a/addons/web/static/src/scss/banner.scss
+++ b/addons/web/static/src/scss/banner.scss
@@ -1,8 +1,9 @@
.o_has_banner {
.o_view_nocontent {
top: 30%;
- @media screen and (max-height: map-get($grid-breakpoints, 'md')) {
+ @include media-breakpoint-down(sm) {
position: relative;
+ margin: auto;
}
}
}
diff --git a/addons/web/static/src/scss/control_panel.scss b/addons/web/static/src/scss/control_panel.scss
index dd74c8ac010..c08695fc28d 100644
--- a/addons/web/static/src/scss/control_panel.scss
+++ b/addons/web/static/src/scss/control_panel.scss
@@ -1,13 +1,24 @@
.o_control_panel {
- display: flex;
- flex-flow: row wrap;
border-bottom: 1px solid darken($o-control-panel-background-color, 20%);
@include o-webclient-padding($top: 10px, $bottom: 10px);
background-color: $o-control-panel-background-color;
- > .breadcrumb {
- width: 50%;
+ > div {
+ display: flex;
+ justify-content: space-between;
+ min-height: 30px;
+ }
+
+ .breadcrumb, .o_cp_left {
+ flex: 1 1 auto;
+ }
+
+ .o_cp_searchview, .o_cp_right {
+ flex: 0 0 50%;
+ }
+
+ .breadcrumb {
font-size: 18px;
> li {
@@ -19,8 +30,7 @@
}
}
- > .o_cp_searchview {
- width: 50%;
+ .o_cp_searchview {
min-height: $o-cp-breadcrumb-height;
}
@@ -30,10 +40,9 @@
background: white;
}
- > .o_cp_left {
+ .o_cp_left {
display: flex;
justify-content: space-between;
- width: 50%;
margin-top: 5px;
> .o_cp_sidebar {
@@ -65,9 +74,8 @@
}
}
- > .o_cp_right {
+ .o_cp_right {
display: flex;
- width: 50%;
margin-top: 5px;
> .o_cp_pager {
diff --git a/addons/web/static/src/scss/fields.scss b/addons/web/static/src/scss/fields.scss
index b9f85f2d5c0..e3cba4e3770 100644
--- a/addons/web/static/src/scss/fields.scss
+++ b/addons/web/static/src/scss/fields.scss
@@ -196,6 +196,7 @@
img {
height: 18px;
width: 18px;
+ object-fit: cover;
}
&.o_tag_color_0 {
background-color: #F1F1F1;
diff --git a/addons/web/static/src/scss/kanban_view.scss b/addons/web/static/src/scss/kanban_view.scss
index 18c96fb6171..a46d4632c24 100644
--- a/addons/web/static/src/scss/kanban_view.scss
+++ b/addons/web/static/src/scss/kanban_view.scss
@@ -122,6 +122,7 @@
.oe_kanban_avatar {
width: 20px;
height: 20px;
+ object-fit: cover;
margin-left: 6px;
}
}
diff --git a/addons/web/static/src/scss/list_view.scss b/addons/web/static/src/scss/list_view.scss
index 0d29c3cec21..0e62f071d42 100644
--- a/addons/web/static/src/scss/list_view.scss
+++ b/addons/web/static/src/scss/list_view.scss
@@ -201,7 +201,7 @@
right: 0;
top: 0;
width: 10px;
- z-index: 10;
+ z-index: 1; // must be over the sort caret (::after pseudo-element)
}
.o_list_record_remove_header {
@@ -294,9 +294,11 @@
}
.o_optional_columns_dropdown_toggle {
+ cursor: pointer;
width: 10px;
text-align: center;
line-height: 30px;
+ z-index: 1; // must be over the resize handle
}
.o_optional_columns {
diff --git a/addons/web/static/src/scss/modal.scss b/addons/web/static/src/scss/modal.scss
index f33aec59431..e7243042d35 100644
--- a/addons/web/static/src/scss/modal.scss
+++ b/addons/web/static/src/scss/modal.scss
@@ -96,6 +96,11 @@
}
}
+body.modal-open {
+ // Allow vertical scrolling in modals on iOS
+ -webkit-overflow-scrolling: touch;
+}
+
// Temporary fix for modals which are not instantiated thanks to the Dialog
// JS classes (deprecated case) (see bootstrap_overridden.scss) + Frontend.
//
diff --git a/addons/web/static/src/scss/search_view_mobile.scss b/addons/web/static/src/scss/search_view_mobile.scss
index dd72aaae83b..bf68732b2e5 100644
--- a/addons/web/static/src/scss/search_view_mobile.scss
+++ b/addons/web/static/src/scss/search_view_mobile.scss
@@ -83,10 +83,6 @@
}
}
.o_mobile_search_show_result {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
padding: 15px;
font-size: 17px;
}
diff --git a/addons/web/static/src/scss/ui.scss b/addons/web/static/src/scss/ui.scss
index 9ab1729a4ac..5a46c9c01a8 100644
--- a/addons/web/static/src/scss/ui.scss
+++ b/addons/web/static/src/scss/ui.scss
@@ -91,3 +91,41 @@ span.o_force_ltr {
/*rtl:ignore*/
direction: ltr;
}
+
+// To fill the available space while keeping aspect ratio (crop).
+// Assuming the important part of the image is its center.
+.o_object_fit_cover {
+ object-fit: cover;
+}
+
+.o_image_24_cover {
+ width: 24px;
+ height: 24px;
+ object-fit: cover;
+}
+
+.o_image_40_cover {
+ width: 40px;
+ height: 40px;
+ object-fit: cover;
+}
+
+.o_image_64_cover {
+ width: 64px;
+ height: 64px;
+ object-fit: cover;
+}
+
+// Keep ratio but avoid cropping (so part of the background becomes visible).
+.o_image_64_contain {
+ width: 64px;
+ height: 64px;
+ object-fit: contain;
+}
+
+// When having a square is not necessary, the image will take less space if any
+// of its width or height is smaller than 64px.
+.o_image_64_max {
+ max-width: 64px;
+ max-height: 64px;
+}
diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml
index 300aff10c00..f52818d5ed6 100644
--- a/addons/web/static/src/xml/base.xml
+++ b/addons/web/static/src/xml/base.xml
@@ -148,18 +148,22 @@
<t t-name="ControlPanel">
<div class="o_control_panel">
- <ol class="breadcrumb" role="navigation"/>
- <div class="o_cp_searchview" role="search">
- <t t-call="SearchView"/>
- </div>
- <div class="o_cp_left">
- <div class="o_cp_buttons" role="toolbar" aria-label="Control panel toolbar"/>
- <aside class="o_cp_sidebar"/>
+ <div>
+ <ol class="breadcrumb" role="navigation"/>
+ <div class="o_cp_searchview" role="search">
+ <t t-if="widget.withSearchBar" t-call="SearchView"/>
+ </div>
</div>
- <div class="o_cp_right">
- <div class="btn-group o_search_options" role="search"/>
- <nav class="o_cp_pager" role="search" aria-label="Pager"/>
- <nav class="btn-group o_cp_switch_buttons" role="toolbar" aria-label="View switcher"/>
+ <div>
+ <div class="o_cp_left">
+ <div class="o_cp_buttons" role="toolbar" aria-label="Control panel toolbar"/>
+ <aside class="o_cp_sidebar"/>
+ </div>
+ <div class="o_cp_right">
+ <div class="btn-group o_search_options" role="search"/>
+ <nav class="o_cp_pager" role="search" aria-label="Pager"/>
+ <nav class="btn-group o_cp_switch_buttons" role="toolbar" aria-label="View switcher"/>
+ </div>
</div>
</div>
</t>
@@ -271,6 +275,9 @@
Create
</button>
</t>
+ <t t-if="widget.is_action_enabled('download')">
+ <button type="button" class="btn btn-secondary fa fa-download o_list_download" title="Download xls" aria-label="Download xls"/>
+ </t>
</div>
</t>
@@ -705,8 +712,8 @@
<t t-name="FieldMany2One">
<t t-if="widget.mode === 'readonly'">
- <a t-if="!widget.nodeOptions.no_open" t-att-tabindex="widget.attrs.tabindex" class="o_form_uri" href="#"/>
- <span t-if="widget.nodeOptions.no_open"/>
+ <a t-if="!widget.noOpen" t-att-tabindex="widget.attrs.tabindex" class="o_form_uri" href="#"/>
+ <span t-if="widget.noOpen"/>
</t>
<div t-if="widget.mode === 'edit'" class="o_field_widget o_field_many2one" aria-atomic="true">
<div class="o_input_dropdown">
@@ -1161,7 +1168,14 @@
</div>
<div t-name="SearchView" class="o_searchview" role="search" aria-autocomplete="list">
- <span class="o_searchview_more fa" title="Advanced Search..." role="img" aria-label="Advanced Search..."/>
+ <t t-if="widget.isMobile">
+ <t t-call="MobileSearchView"/>
+ <button class="o_toggle_searchview_full o_hidden btn fa fa-filter"/>
+ <button class="o_enable_searchview btn btn-link fa fa-search"/>
+ </t>
+ <t t-else="">
+ <span class="o_searchview_more fa" title="Advanced Search..." role="img" aria-label="Advanced Search..."/>
+ </t>
</div>
<div t-name="SearchView.SearchBar" class="o_searchview_input_container">
@@ -1230,40 +1244,17 @@
</select>
</t>
-<t t-name="MobileControlPanel">
- <div class="o_control_panel">
- <ol class="breadcrumb" role="navigation"/>
- <div class="o_cp_searchview" role="search">
- <t t-call="MobileSearchView"/>
- </div>
- <div class="o_cp_left">
- <div class="o_cp_buttons" role="toolbar" aria-label="Control panel toolbar"/>
- <aside class="o_cp_sidebar"/>
- </div>
- <div class="o_cp_right">
- <div class="btn-group o_search_options" role="search"/>
- <nav class="o_cp_pager" role="search" aria-label="Pager"/>
- <nav class="btn-group o_cp_switch_buttons" role="toolbar" aria-label="View switcher"/>
- </div>
- </div>
-</t>
-
-<t t-name="MobileSearchView">
- <div class="o_searchview" role="search" aria-autocomplete="list">
- <button class="o_enable_searchview btn fa fa-search"/>
- <div class="o_mobile_search o_hidden">
- <div class="o_mobile_search_header">
- <span class="o_mobile_search_close float-left mt16 mb16 mr8 ml16">
- <i class="fa fa-arrow-left"/>
- <strong class="float-right ml8">FILTER</strong>
- </span>
- <span class="float-right o_mobile_search_clear_facets mt16 mr16">CLEAR</span>
- </div>
- <div class="o_mobile_search_filter o_search_options mb8 mt8 ml16 mr16"/>
- <div class="btn btn-primary o_mobile_search_show_result">SEE RESULT</div>
- </div>
+<div t-name="MobileSearchView" class="o_mobile_search o_hidden">
+ <div class="o_mobile_search_header">
+ <span class="o_mobile_search_close float-left mt16 mb16 mr8 ml16">
+ <i class="fa fa-arrow-left"/>
+ <strong class="float-right ml8">FILTER</strong>
+ </span>
+ <span class="float-right o_mobile_search_clear_facets mt16 mr16">CLEAR</span>
</div>
-</t>
+ <div class="o_mobile_search_filter o_search_options mb8 mt8 ml16 mr16"/>
+ <div class="btn btn-primary o_mobile_search_show_result fixed-bottom">SEE RESULT</div>
+</div>
<div t-name="AddNewFavoriteMenu">
<button type="button" class="dropdown-item o_generator_menu o_add_favorite o_menu_header">Save Current Search</button>
diff --git a/addons/web/static/tests/chrome/action_manager_tests.js b/addons/web/static/tests/chrome/action_manager_tests.js
index bc40fc97011..002a52f572f 100644
--- a/addons/web/static/tests/chrome/action_manager_tests.js
+++ b/addons/web/static/tests/chrome/action_manager_tests.js
@@ -3518,7 +3518,7 @@ QUnit.module('ActionManager', {
active_ids: [1],
},
flags: {
- withSearchPanel: false,
+ searchPanelDefaultNoFilter: true,
},
});
var checkSessionStorage = false;
diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js
index eca412c036a..aa86ff925e4 100644
--- a/addons/web/static/tests/fields/basic_fields_tests.js
+++ b/addons/web/static/tests/fields/basic_fields_tests.js
@@ -11,6 +11,7 @@ var KanbanView = require('web.KanbanView');
var ListView = require('web.ListView');
var session = require('web.session');
var testUtils = require('web.test_utils');
+var testUtilsDom = require('web.test_utils_dom');
var field_registry = require('web.field_registry');
var createView = testUtils.createView;
@@ -3361,6 +3362,63 @@ QUnit.module('basic_fields', {
form.destroy();
});
+ QUnit.test('datetime fields do not trigger fieldChange before datetime completly picked', async function (assert) {
+ assert.expect(6);
+
+ this.data.partner.onchanges = {
+ datetime: function () {},
+ };
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form><field name="datetime"/></form>',
+ res_id: 1,
+ translateParameters: { // Avoid issues due to localization formats
+ date_format: '%m/%d/%Y',
+ time_format: '%H:%M:%S',
+ },
+ session: {
+ getTZOffset: function () {
+ return 120;
+ },
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'onchange') {
+ assert.step('onchange');
+ }
+ return this._super.apply(this, arguments);
+ },
+ viewOptions: {
+ mode: 'edit',
+ },
+ });
+
+
+ testUtils.dom.openDatepicker(form.$('.o_datepicker'));
+ assert.containsOnce($('body'), '.bootstrap-datetimepicker-widget');
+
+ // select a date and time
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .picker-switch').first());
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .picker-switch:eq(1)'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .year:contains(2017)'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .month').eq(3));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .day:contains(22)'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .fa-clock-o'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .timepicker-hour'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .hour:contains(08)'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .timepicker-minute'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .minute:contains(25)'));
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .timepicker-second'));
+ assert.verifySteps([], "should not have done any onchange yet");
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget .second:contains(35)'));
+
+ assert.containsNone($('body'), '.bootstrap-datetimepicker-widget');
+ assert.strictEqual(form.$('.o_datepicker_input').val(), "04/22/2017 08:25:35");
+ assert.verifySteps(['onchange'], "should have done only one onchange");
+
+ form.destroy();
+ });
QUnit.test('datetime field not visible in form view should not capture the focus on keyboard navigation', async function (assert) {
assert.expect(1);
@@ -3483,6 +3541,45 @@ QUnit.module('basic_fields', {
list.destroy();
});
+ QUnit.test('multi edition of datetime field in list view: edit date in input', async function (assert) {
+ assert.expect(4);
+
+ var list = await createView({
+ View: ListView,
+ model: 'partner',
+ data: this.data,
+ arch: '<tree editable="bottom">' +
+ '<field name="datetime"/>' +
+ '</tree>',
+ translateParameters: { // Avoid issues due to localization formats
+ date_format: '%m/%d/%Y',
+ time_format: '%H:%M:%S',
+ },
+ session: {
+ getTZOffset: function () {
+ return 120;
+ },
+ },
+ });
+
+ // select two records and edit them
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
+
+ await testUtils.dom.click(list.$('.o_data_row:first .o_data_cell'));
+ assert.containsOnce(list, 'input.o_datepicker_input');
+ list.$('.o_datepicker_input').val("10/02/2019 09:00:00");
+ await testUtils.dom.triggerEvents(list.$('.o_datepicker_input'), ['change']);
+
+ assert.containsOnce(document.body, '.modal');
+ await testUtils.dom.click($('.modal .modal-footer .btn-primary'));
+
+ assert.strictEqual(list.$('.o_data_row:first .o_data_cell').text(), "10/02/2019 09:00:00");
+ assert.strictEqual(list.$('.o_data_row:nth(1) .o_data_cell').text(), "10/02/2019 09:00:00");
+
+ list.destroy();
+ });
+
QUnit.test('datetime field remove value', async function (assert) {
assert.expect(4);
@@ -5859,7 +5956,7 @@ QUnit.module('basic_fields', {
QUnit.module('FieldProgressBar');
QUnit.test('Field ProgressBar: max_value should update', async function (assert) {
- assert.expect(2);
+ assert.expect(3);
this.data.partner.records = this.data.partner.records.slice(0,1);
this.data.partner.records[0].qux = 2;
@@ -5884,6 +5981,15 @@ QUnit.module('basic_fields', {
viewOptions: {
mode: 'edit',
},
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.deepEqual(
+ args.args[1],
+ {int_field: 999, qux: 5, display_name: 'new name'},
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
});
assert.strictEqual(form.$('.o_progressbar_value').text(), '10 / 2',
@@ -5895,6 +6001,435 @@ QUnit.module('basic_fields', {
assert.strictEqual(form.$('.o_progressbar_value').text(), '999 / 5',
'The value of the progress bar should be correct after the update');
+ await testUtilsDom.click(form.$buttons.find('.o_form_button_save'));
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: value should not update in readonly mode when sliding the bar', async function (assert) {
+ assert.expect(4);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true}" />' +
+ '</form>',
+ res_id: 1,
+ mockRPC: function (route, args) {
+ assert.step(route);
+ return this._super.apply(this, arguments);
+ }
+ });
+ var $view = $('#qunit-fixture').contents();
+ $view.prependTo('body'); // => select with click position
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'Initial value should be correct')
+
+ var $progressBarEl = form.$('.o_progress');
+ var top = $progressBarEl.offset().top + 5;
+ var left = $progressBarEl.offset().left + 5;
+ try {
+ testUtils.triggerPositionalMouseEvent(left, top, "click");
+ } catch (e) {
+ form.destroy();
+ $view.remove();
+ throw new Error('The test fails to simulate a click in the screen. Your screen is probably too small or your dev tools is open.');
+ }
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'New value should be different than initial after click');
+
+ assert.verifySteps(["/web/dataset/call_kw/partner/read"]);
+
+ form.destroy();
+ $view.remove();
+ });
+
+ QUnit.test('Field ProgressBar: value should not update in edit mode when sliding the bar', async function (assert) {
+ assert.expect(6);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true}" />' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ mockRPC: function (route, args) {
+ assert.step(route);
+ return this._super.apply(this, arguments);
+ }
+ });
+ var $view = $('#qunit-fixture').contents();
+ $view.prependTo('body'); // => select with click position
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_editable'), 'Form in edit mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'Initial value should be correct')
+
+ var $progressBarEl = form.$('.o_progress');
+ var top = $progressBarEl.offset().top + 5;
+ var left = $progressBarEl.offset().left + 5;
+ try {
+ testUtils.triggerPositionalMouseEvent(left, top, "click");
+ } catch (e) {
+ form.destroy();
+ $view.remove();
+ throw new Error('The test fails to simulate a click in the screen. Your screen is probably too small or your dev tools is open.');
+ }
+ assert.strictEqual(form.$('.o_progressbar_value.o_input').val(), "99",
+ 'Value of input is not changed');
+ await testUtilsDom.click(form.$buttons.find('.o_form_button_save'));
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'New value should be different than initial after click');
+
+ assert.verifySteps(["/web/dataset/call_kw/partner/read"]);
+
+ form.destroy();
+ $view.remove();
+ });
+
+ QUnit.test('Field ProgressBar: value should update in edit mode when typing in input', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true}" />' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.strictEqual(args.args[1].int_field, 69,
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_editable'), 'Form in edit mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), '99', 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, '69', ['input', 'blur']);
+
+ await testUtilsDom.click(form.$buttons.find('.o_form_button_save'));
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '69%',
+ 'New value should be different than initial after click');
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: value should update in edit mode when typing in input with field max value', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="qux" invisible="1" />' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true, \'max_value\': \'qux\'}" />' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.strictEqual(args.args[1].int_field, 69,
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_editable'), 'Form in edit mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99 / 0',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), '99', 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, '69', ['input', 'blur']);
+
+ await testUtilsDom.click(form.$buttons.find('.o_form_button_save'));
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '69 / 0',
+ 'New value should be different than initial after click');
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: max value should update in edit mode when typing in input with field max value', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="qux" invisible="1" />' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true, \'max_value\': \'qux\', \'edit_max_value\': true}" />' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.strictEqual(args.args[1].qux, 69,
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_editable'), 'Form in edit mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99 / 0',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), "0.44444", 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, '69', ['input', 'blur']);
+
+ await testUtilsDom.click(form.$buttons.find('.o_form_button_save'));
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99 / 69',
+ 'New value should be different than initial after click');
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: Standard readonly mode is readonly', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="qux" invisible="1" />' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true, \'max_value\': \'qux\', \'edit_max_value\': true}" />' +
+ '</form>',
+ res_id: 1,
+ mockRPC: function (route, args) {
+ assert.step(route);
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_readonly'), 'Form in readonly mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99 / 0',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ assert.containsNone(form, '.o_progressbar_value.o_input', 'no input in readonly mode');
+
+ assert.verifySteps(["/web/dataset/call_kw/partner/read"]);
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: max value should update in readonly mode with right parameter when typing in input with field max value', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="qux" invisible="1" />' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true, \'max_value\': \'qux\', \'edit_max_value\': true, \'editable_readonly\': true}" />' +
+ '</form>',
+ res_id: 1,
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.strictEqual(args.args[1].qux, 69,
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_readonly'), 'Form in readonly mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99 / 0',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), "0.44444", 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, '69', ['input', 'blur']);
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99 / 69',
+ 'New value should be different than initial after changing it');
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: value should update in readonly mode with right parameter when typing in input with field value', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true, \'editable_readonly\': true}" />' +
+ '</form>',
+ res_id: 1,
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.strictEqual(args.args[1].int_field, 69,
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_readonly'), 'Form in readonly mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), "99", 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, '69.6', ['input', 'blur']);
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '69%',
+ 'New value should be different than initial after changing it');
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: write float instead of int works, in locale', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true}" />' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ translateParameters: {
+ thousands_sep: "#",
+ decimal_point: ":",
+ },
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.strictEqual(args.args[1].int_field, 1037,
+ 'New value of progress bar saved');
+ }
+ return this._super.apply(this, arguments);
+ }
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_editable'), 'Form in edit mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), '99', 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, '1#037:9', ['input', 'blur']);
+
+ await testUtilsDom.click(form.$buttons.find('.o_form_button_save'));
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '1k%',
+ 'New value should be different than initial after click');
+
+ form.destroy();
+ });
+
+ QUnit.test('Field ProgressBar: write gibbrish instead of int throws warning', async function (assert) {
+ assert.expect(5);
+ this.data.partner.records[0].int_field = 99;
+
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form>' +
+ '<field name="int_field" widget="progressbar" options="{\'editable\': true}" />' +
+ '</form>',
+ res_id: 1,
+ viewOptions: {
+ mode: 'edit',
+ },
+ interceptsPropagate: {
+ call_service: function (ev) {
+ if (ev.data.service === 'notification') {
+ assert.strictEqual(ev.data.method, 'notify');
+ assert.strictEqual(ev.data.args[0].title, 'Wrong value entered!');
+ }
+ }
+ },
+ });
+
+ assert.ok(form.$('.o_form_view').hasClass('o_form_editable'), 'Form in edit mode');
+
+ assert.strictEqual(form.$('.o_progressbar_value').text(), '99%',
+ 'Initial value should be correct');
+
+ await testUtilsDom.click(form.$('.o_progress'));
+
+ var $valInput = form.$('.o_progressbar_value.o_input');
+ assert.strictEqual($valInput.val(), '99', 'Initial value in input is correct');
+
+ await testUtils.fields.editAndTrigger($valInput, 'trente sept virgule neuf', ['input']);
+
form.destroy();
});
diff --git a/addons/web/static/tests/fields/relational_fields/field_many2many_tests.js b/addons/web/static/tests/fields/relational_fields/field_many2many_tests.js
index db0fb3632d3..487cd8647b8 100644
--- a/addons/web/static/tests/fields/relational_fields/field_many2many_tests.js
+++ b/addons/web/static/tests/fields/relational_fields/field_many2many_tests.js
@@ -1106,6 +1106,47 @@ QUnit.module('fields', {}, function () {
form.destroy();
});
+ QUnit.test("many2many tags widget: save&new in edit mode doesn't close edit window", async function (assert) {
+ assert.expect(5);
+ for (var i = 1; i <= 10; i++) {
+ this.data.partner_type.records.push({ id: 100 + i, display_name: "Partner" + i});
+ }
+ var form = await createView({
+ View: FormView,
+ model: 'partner',
+ data: this.data,
+ arch: '<form string="Partners">' +
+ '<field name="display_name"/>' +
+ '<field name="timmy" widget="many2many_tags"/>' +
+ '</form>',
+ res_id: 1,
+ archs: {
+ 'partner_type,false,list': '<tree><field name="display_name"/></tree>',
+ 'partner_type,false,search': '<search><field name="display_name"/></search>',
+ 'partner_type,false,form': '<form><field name="display_name"/></form>'
+ },
+ });
+ await testUtils.form.clickEdit(form);
+
+ await testUtils.fields.many2one.clickOpenDropdown('timmy');
+ await testUtils.fields.many2one.clickItem('timmy','Create and Edit');
+ assert.containsOnce($(document), '.modal .o_form_view', "should have opened the modal");
+
+ // Create multiple records with save & new
+ await testUtils.fields.editInput($('.modal input:first'), 'Ralts');
+ await testUtils.dom.click($('.modal .btn-primary:nth-child(2)'));
+ assert.containsOnce($(document), '.modal .o_form_view', "modal should still be open");
+ assert.equal($('.modal input:first')[0].value, '', "input should be empty")
+
+ // Create another record and click save & close
+ await testUtils.fields.editInput($('.modal input:first'), 'Pikachu');
+ await testUtils.dom.click($('.modal .btn-primary:first'));
+ assert.containsNone($(document),'.modal .o_list_view', "should have closed the modal");
+ assert.containsN(form, '.o_field_many2manytags[name="timmy"] .badge', 2, "many2many tag should now contain 2 records");
+
+ form.destroy();
+ });
+
QUnit.test('many2many list add *many* records, remove, re-add', async function (assert) {
assert.expect(5);
diff --git a/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js b/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js
index f4cd0e1be0b..4d5b5d8aa89 100644
--- a/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js
+++ b/addons/web/static/tests/fields/relational_fields/field_many2one_tests.js
@@ -566,6 +566,81 @@ QUnit.module('fields', {}, function () {
form.destroy();
});
+ QUnit.test("many2one doesn't trigger field_change when being emptied", async function (assert) {
+ assert.expect(2);
+
+ const list = await createView({
+ arch: `
+ <tree editable="top">
+ <field name="trululu"/>
+ </tree>`,
+ data: this.data,
+ model: 'partner',
+ View: ListView,
+ });
+
+ // Select two records
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
+
+ await testUtils.dom.click(list.$('.o_data_row:first() .o_data_cell:first()'));
+
+ const $input = list.$('.o_field_widget[name=trululu] input');
+
+ await testUtils.fields.editInput($input, "");
+ await testUtils.dom.triggerEvents($input, ['keyup']);
+
+ assert.containsNone(document.body, '.modal',
+ "No save should be triggered when removing value");
+
+ await testUtils.fields.many2one.clickOpenDropdown('trululu');
+ await testUtils.fields.many2one.clickHighlightedItem('trululu');
+
+ assert.containsOnce(document.body, '.modal',
+ "Saving should be triggered when selecting a value");
+ await testUtils.dom.click($('.modal .btn-primary'));
+
+ list.destroy();
+ });
+
+ QUnit.test("focus tracking on a many2one in a list", async function (assert) {
+ assert.expect(4);
+
+ const list = await createView({
+ arch: '<tree editable="top"><field name="trululu"/></tree>',
+ archs: {
+ 'partner,false,form': '<form string="Partners"><field name="foo"/></form>',
+ },
+ data: this.data,
+ model: 'partner',
+ View: ListView,
+ });
+
+ // Select two records
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
+
+ await testUtils.dom.click(list.$('.o_data_row:first() .o_data_cell:first()'));
+
+ const input = list.$('.o_data_row:first() .o_data_cell:first() input')[0];
+
+ assert.strictEqual(document.activeElement, input, "Input should be focused when activated");
+
+ await testUtils.fields.many2one.clickOpenDropdown('trululu');
+ await testUtils.fields.many2one.clickItem('trululu', 'Create');
+
+ // At this point, if the focus is correctly registered by the m2o, there
+ // should be only one modal (the "Create" one) and none for saving changes.
+ assert.containsOnce(document.body, '.modal', "There should be only one modal");
+
+ await testUtils.dom.click($('.modal .btn:not(.btn-primary)'));
+
+ assert.strictEqual(document.activeElement, input, "Input should be focused after dialog closes");
+ assert.strictEqual(input.value, "", "Input should be empty after discard");
+
+ list.destroy();
+ });
+
QUnit.test('many2one fields with option "no_open"', async function (assert) {
assert.expect(3);
diff --git a/addons/web/static/tests/fields/relational_fields_tests.js b/addons/web/static/tests/fields/relational_fields_tests.js
index 7f3f54e3ad7..24ce3e892c8 100644
--- a/addons/web/static/tests/fields/relational_fields_tests.js
+++ b/addons/web/static/tests/fields/relational_fields_tests.js
@@ -1886,7 +1886,7 @@ QUnit.module('relational_fields', {
});
assert.containsN(form, '.o_field_many2manytags.avatar.o_field_widget .badge', 2, "should have 2 records");
- assert.strictEqual(form.$('.o_field_many2manytags.avatar.o_field_widget .badge:first img').data('src'), '/web/image/partner/2/image_64',
+ assert.strictEqual(form.$('.o_field_many2manytags.avatar.o_field_widget .badge:first img').data('src'), '/web/image/partner/2/image_128',
"should have correct avatar image");
form.destroy();
diff --git a/addons/web/static/tests/helpers/mock_server.js b/addons/web/static/tests/helpers/mock_server.js
index d77e8ceae79..f09456956ef 100644
--- a/addons/web/static/tests/helpers/mock_server.js
+++ b/addons/web/static/tests/helpers/mock_server.js
@@ -326,10 +326,12 @@ var MockServer = Class.extend({
if (field.type === "one2many" || field.type === "many2many") {
field.views = {};
_.each(node.childNodes, function (children) {
- relModel = field.relation;
- relFields = $.extend(true, {}, self.data[relModel].fields);
- field.views[children.tagName] = self._fieldsViewGet(children, relModel,
- relFields, _.extend({}, context, {base_model_name: model}));
+ if (children.tagName) { // skip text nodes
+ relModel = field.relation;
+ relFields = $.extend(true, {}, self.data[relModel].fields);
+ field.views[children.tagName] = self._fieldsViewGet(children, relModel,
+ relFields, _.extend({}, context, {base_model_name: model}));
+ }
});
}
diff --git a/addons/web/static/tests/views/graph_tests.js b/addons/web/static/tests/views/graph_tests.js
index 7cbab784829..d44d2e61a81 100644
--- a/addons/web/static/tests/views/graph_tests.js
+++ b/addons/web/static/tests/views/graph_tests.js
@@ -133,7 +133,7 @@ QUnit.module('Views', {
data: [3,5],
label: "Count",
originIndex: 0,
- stack: undefined,
+ stack: "",
}
);
assert.checkLegend(graph, 'Count');
diff --git a/addons/web/static/tests/views/list_tests.js b/addons/web/static/tests/views/list_tests.js
index c97b1916265..82607c43689 100644
--- a/addons/web/static/tests/views/list_tests.js
+++ b/addons/web/static/tests/views/list_tests.js
@@ -6,6 +6,7 @@ var BasicModel = require('web.BasicModel');
var core = require('web.core');
var basicFields = require('web.basic_fields');
var FormView = require('web.FormView');
+var ListRenderer = require('web.ListRenderer');
var ListView = require('web.ListView');
var mixins = require('web.mixins');
var NotificationService = require('web.NotificationService');
@@ -214,7 +215,7 @@ QUnit.module('Views', {
});
QUnit.test('simple editable rendering', async function (assert) {
- assert.expect(12);
+ assert.expect(15);
var list = await createView({
View: ListView,
@@ -225,6 +226,7 @@ QUnit.module('Views', {
assert.containsN(list, 'th', 3, "should have 2 th");
assert.containsN(list, 'th', 3, "should have 3 th");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
assert.containsOnce(list, 'td:contains(yop)', "should contain yop");
assert.isVisible(list.$buttons.find('.o_list_button_add'),
@@ -242,6 +244,7 @@ QUnit.module('Views', {
"should have a visible save button");
assert.isVisible(list.$buttons.find('.o_list_button_discard'),
"should have a visible discard button");
+ assert.containsNone(list, '.o_list_record_selector input:enabled');
await testUtils.dom.click(list.$buttons.find('.o_list_button_save'));
@@ -251,6 +254,8 @@ QUnit.module('Views', {
"should not have a visible save button");
assert.isNotVisible(list.$buttons.find('.o_list_button_discard'),
"should not have a visible discard button");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
+
list.destroy();
});
@@ -1139,6 +1144,49 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('head selector is toggled by the other selectors', async function (assert) {
+ assert.expect(6);
+
+ const list = await createView({
+ arch: '<tree><field name="foo"/><field name="bar"/></tree>',
+ data: this.data,
+ groupBy: ['bar'],
+ model: 'foo',
+ View: ListView,
+ });
+
+ assert.ok(!list.$('thead .o_list_record_selector input')[0].checked,
+ "Head selector should be unchecked");
+
+ await testUtils.dom.click(list.$('.o_group_header:first()'));
+ await testUtils.dom.click(list.$('thead .o_list_record_selector input'));
+
+ assert.containsN(list, 'tbody .o_list_record_selector input:checked',
+ 3, "All visible checkboxes should be checked");
+
+ await testUtils.dom.click(list.$('.o_group_header:last()'));
+
+ assert.ok(!list.$('thead .o_list_record_selector input')[0].checked,
+ "Head selector should be unchecked");
+
+ await testUtils.dom.click(list.$('tbody .o_list_record_selector input:last()'));
+
+ assert.ok(list.$('thead .o_list_record_selector input')[0].checked,
+ "Head selector should be checked");
+
+ await testUtils.dom.click(list.$('tbody .o_list_record_selector:first() input'));
+
+ assert.ok(!list.$('thead .o_list_record_selector input')[0].checked,
+ "Head selector should be unchecked");
+
+ await testUtils.dom.click(list.$('.o_group_header:first()'));
+
+ assert.ok(list.$('thead .o_list_record_selector input')[0].checked,
+ "Head selector should be checked");
+
+ list.destroy();
+ });
+
QUnit.test('selection is reset on reload', async function (assert) {
assert.expect(5);
@@ -1516,7 +1564,7 @@ QUnit.module('Views', {
'</tree>',
});
- assert.containsNone(list, 'o_resize', "There shouldn't be any resize handle if no data");
+ assert.containsNone(list, '.o_resize', "There shouldn't be any resize handle if no data");
assertions.forEach(a => {
assert.strictEqual(list.$(`th[data-name="${a.field}"]`)[0].offsetWidth, a.expected,
`Field ${a.type} should have a fixed width of ${a.expected} pixels`);
@@ -1527,6 +1575,66 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('width of some fields should be hardcoded if no data, and list initially invisible', async function (assert) {
+ const assertions = [
+ { field: 'bar', expected: 40, type: 'Boolean' },
+ { field: 'int_field', expected: 74, type: 'Integer' },
+ { field: 'qux', expected: 92, type: 'Float' },
+ { field: 'date', expected: 92, type: 'Date' },
+ { field: 'datetime', expected: 146, type: 'Datetime' },
+ { field: 'amount', expected: 104, type: 'Monetary' },
+ { field: 'the_button', expected: 25, type: 'with custom width' },
+ ];
+ assert.expect(11);
+
+ this.data.foo.fields.foo_o2m = {string: "Foo O2M", type: "one2many", relation: "foo"};
+ const form = await createView({
+ View: FormView,
+ model: 'foo',
+ data: this.data,
+ res_id: 1,
+ viewOptions: { mode: 'edit' },
+ arch: `<form>
+ <sheet>
+ <notebook>
+ <page string="Page1"></page>
+ <page string="Page2">
+ <field name="foo_o2m">
+ <tree editable="bottom">
+ <field name="bar"/>
+ <field name="foo"/>
+ <field name="int_field"/>
+ <field name="qux"/>
+ <field name="date"/>
+ <field name="datetime"/>
+ <field name="amount"/>
+ <button name="the_button" width="25px"/>
+ </tree>
+ </field>
+ </page>
+ </notebook>
+ </sheet>
+ </form>`,
+ });
+
+ assert.isNotVisible(form.$('.o_field_one2many'));
+
+ await testUtils.dom.click(form.$('.nav-item:last-child .nav-link'));
+
+ assert.isVisible(form.$('.o_field_one2many'));
+
+ assert.containsNone(form, '.o_field_one2many .o_resize',
+ "There shouldn't be any resize handle if no data");
+ assertions.forEach(a => {
+ assert.strictEqual(form.$(`.o_field_one2many th[data-name="${a.field}"]`)[0].offsetWidth, a.expected,
+ `Field ${a.type} should have a fixed width of ${a.expected} pixels`);
+ });
+ assert.strictEqual(form.$('.o_field_one2many th[data-name="foo"]')[0].style.width, '100%',
+ "Char field should occupy the remaining space");
+
+ form.destroy();
+ });
+
QUnit.test('editable list: list view in an initially unselected notebook page', async function (assert) {
assert.expect(9);
@@ -1826,7 +1934,7 @@ QUnit.module('Views', {
groupBy: ['int_field'],
});
- assert.containsNone(list, 'o_resize', "There shouldn't be any resize handle if no data");
+ assert.containsNone(list, '.o_resize', "There shouldn't be any resize handle if no data");
assertions.forEach(a => {
assert.strictEqual(list.$(`th[data-name="${a.field}"]`)[0].offsetWidth, a.expected,
`Field ${a.type} should have a fixed width of ${a.expected} pixels`);
@@ -1911,6 +2019,43 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('column widths are re-computed on window resize', async function (assert) {
+ assert.expect(2);
+
+ testUtils.mock.patch(ListRenderer, {
+ RESIZE_DELAY: 0,
+ });
+
+ this.data.foo.records[0].text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. ' +
+ 'Sed blandit, justo nec tincidunt feugiat, mi justo suscipit libero, sit amet tempus ' +
+ 'ipsum purus bibendum est.';
+ const list = await createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: `<tree editable="bottom">
+ <field name="datetime"/>
+ <field name="text"/>
+ </tree>`,
+ });
+
+ const initialTextWidth = list.$('th[data-name="text"]')[0].offsetWidth;
+ const selectorWidth = list.$('th.o_list_record_selector')[0].offsetWidth;
+
+ // simulate a window resize
+ list.$el.width(`${list.$el.width() / 2}px`);
+ core.bus.trigger('resize');
+ await testUtils.nextTick();
+
+ const postResizeTextWidth = list.$('th[data-name="text"]')[0].offsetWidth;
+ const postResizeSelectorWidth = list.$('th.o_list_record_selector')[0].offsetWidth;
+ assert.ok(postResizeTextWidth < initialTextWidth);
+ assert.strictEqual(selectorWidth, postResizeSelectorWidth);
+
+ testUtils.mock.unpatch(ListRenderer);
+ list.destroy();
+ });
+
QUnit.test('columns with an absolute width are never narrower than that width', async function (assert) {
assert.expect(2);
@@ -3399,6 +3544,193 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('export list view to xls with nested groups', async function (assert) {
+ assert.expect(5);
+
+ let currencies = {};
+ _.each(this.data.res_currency.records, function (currency) {
+ currencies[currency.id] = currency;
+ });
+
+ let list = await createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: `
+ <tree download="1">
+ <field name="foo"/>
+ <field name="bar"/>
+ <field name="int_field" sum="Total"/>
+ <field name="datetime"/>
+ <field name="amount" widget="monetary"/>
+ <field name="currency_id" invisible="1"/>
+ <field name="o2m"/>
+ <field name="m2o"/>
+ <field name="m2m"/>
+ </tree>`,
+ groupBy: ['foo', 'bar'],
+ session: {
+ currencies: currencies,
+ get_file(args) {
+ let data = JSON.parse(args.data.data);
+ assert.strictEqual(args.url, '/web/list/export_xls',
+ "should call get_file with the correct url");
+ assert.deepEqual(data.columns, [
+ {field: "foo", string: "Foo"},
+ {field: "bar", string: "Bar"},
+ {field: "int_field", aggregateValue: 32, string: "int_field"},
+ {field: "datetime", string: "Datetime Field"},
+ {field: "amount", string: "Monetary field"},
+ {field: "o2m", string: "O2M field"},
+ {field: "m2o", string: "M2O field"},
+ {field: "m2m", string: "M2M field"},
+ ], "columns should be in the correct order with the string and aggregate value")
+ assert.deepEqual(data.groups[0], {
+ // Group "yop"
+ isGrouped: true,
+ count: 1,
+ aggregateValues: {int_field: 10},
+ hideHeader: false,
+ value: "yop",
+ data: [{
+ // Group "yop > true"
+ isGrouped: false,
+ count: 1,
+ aggregateValues: {int_field: 10},
+ hideHeader: false,
+ value: "true",
+ data: [{
+ // Record "yop > true"
+ foo: "yop",
+ bar: "True",
+ int_field: "10",
+ datetime: "12/12/2016 10:55:05",
+ amount: "1200.00€",
+ m2m: "2 records",
+ m2o: "Value 1",
+ o2m: "No records",
+ }]
+ }]
+ });
+ assert.deepEqual(data.groups[1], {
+ // Group "blip"
+ isGrouped: true,
+ count: 2,
+ aggregateValues: {int_field: 5},
+ hideHeader: false,
+ value: "blip",
+ data: [{
+ // Group "blip > true"
+ isGrouped: false,
+ count: 1,
+ aggregateValues: {int_field: 9},
+ hideHeader: false,
+ value: "true",
+ data: [],
+ }, {
+ // Group "blip > false"
+ isGrouped: false,
+ count: 1,
+ aggregateValues: {int_field: -4},
+ hideHeader: false,
+ value: "false",
+ data: [],
+ }]
+ });
+ assert.deepEqual(data.groups[2], {
+ // Group "gnap"
+ isGrouped: true,
+ count: 1,
+ aggregateValues: {int_field: 17},
+ hideHeader: false,
+ value: "gnap",
+ data: [],
+ });
+ args.complete();
+ },
+ },
+ });
+
+ // open the first group
+ await testUtils.dom.click(list.$('.o_group_header:first'));
+
+ // open subgroup
+ let $openGroup = list.$('tbody:nth(1)');
+ await testUtils.dom.click($openGroup.find('.o_group_header:first'));
+
+ // open the second group
+ await testUtils.dom.click(list.$('.o_group_header:nth(2)'));
+
+ // Download
+ await testUtils.dom.click(list.$buttons.find('.o_list_download'));
+
+ list.destroy();
+ });
+
+ QUnit.test('export list view to xls', async function (assert) {
+ assert.expect(3);
+
+ let currencies = {};
+ _.each(this.data.res_currency.records, function (currency) {
+ currencies[currency.id] = currency;
+ });
+
+ let list = await createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: `
+ <tree>
+ <field name="foo"/>
+ <field name="bar"/>
+ <field name="int_field" sum="Total"/>
+ <field name="datetime"/>
+ <field name="amount" widget="monetary"/>
+ <field name="currency_id" invisible="1"/>
+ <field name="o2m"/>
+ <field name="m2o"/>
+ <field name="m2m"/>
+ </tree>`,
+ session: {
+ currencies: currencies,
+ get_file(args) {
+ let data = JSON.parse(args.data.data);
+ assert.strictEqual(args.url, '/web/list/export_xls',
+ "should call get_file with the correct url");
+ assert.deepEqual(data.columns, [
+ {field: "foo", string: "Foo"},
+ {field: "bar", string: "Bar"},
+ {field: "int_field", aggregateValue: 32, string: "int_field"},
+ {field: "datetime", string: "Datetime Field"},
+ {field: "amount", string: "Monetary field"},
+ {field: "o2m", string: "O2M field"},
+ {field: "m2o", string: "M2O field"},
+ {field: "m2m", string: "M2M field"},
+ ], "columns should be in the correct order with the string and aggregate value")
+ assert.deepEqual(data.groups[0], {
+ isGrouped: false,
+ count: 4,
+ aggregateValues: {},
+ hideHeader: true,
+ value: "Undefined",
+ data: [
+ {foo: "yop", bar: "True", int_field: "10", datetime: "12/12/2016 10:55:05", amount: "1200.00€", m2m: "2 records", m2o: "Value 1", o2m: "No records"},
+ {foo: "blip", bar: "True", int_field: "9", datetime: "", amount: "$500.00", m2m: "3 records", m2o: "Value 2", o2m: "No records"},
+ {foo: "gnap", bar: "True", int_field: "17", datetime: "", amount: "$300.00", m2m: "No records", m2o: "Value 1", o2m: "No records"},
+ {foo: "blip", bar: "False", int_field: "-4", datetime: "", amount: "$0.00", m2m: "1 record", m2o: "Value 1", o2m: "No records"},
+ ],
+ });
+ args.complete();
+ },
+ },
+ });
+
+ // Download
+ await testUtils.dom.click(list.$buttons.find('.o_list_download'));
+
+ list.destroy();
+ });
+
QUnit.test('grouped list on selection field at level 2', async function (assert) {
assert.expect(4);
@@ -3475,7 +3807,7 @@ QUnit.module('Views', {
});
QUnit.test('edition: create new line, then discard', async function (assert) {
- assert.expect(8);
+ assert.expect(11);
var list = await createView({
View: ListView,
@@ -3490,11 +3822,13 @@ QUnit.module('Views', {
"create button should be visible");
assert.strictEqual(list.$buttons.find('.o_list_button_discard:visible').length, 0,
"discard button should be hidden");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
await testUtils.dom.click(list.$buttons.find('.o_list_button_add'));
assert.strictEqual(list.$buttons.find('.o_list_button_add:visible').length, 0,
"create button should be hidden");
assert.strictEqual(list.$buttons.find('.o_list_button_discard:visible').length, 1,
"discard button should be visible");
+ assert.containsNone(list, '.o_list_record_selector input:enabled');
await testUtils.dom.click(list.$buttons.find('.o_list_button_discard'));
assert.containsN(list, 'tr.o_data_row', 4,
"should still have 4 records");
@@ -3502,6 +3836,8 @@ QUnit.module('Views', {
"create button should be visible again");
assert.strictEqual(list.$buttons.find('.o_list_button_discard:visible').length, 0,
"discard button should be hidden again");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
+
list.destroy();
});
@@ -4122,37 +4458,6 @@ QUnit.module('Views', {
form.destroy();
});
- QUnit.test('navigation with tab in editable list with only readonly fields', async function (assert) {
- assert.expect(6);
-
- var list = await createView({
- View: ListView,
- model: 'foo',
- data: this.data,
- arch: '<tree editable="bottom">' +
- '<field name="m2o" attrs="{\'readonly\': [(\'int_field\', \'>\', 9)]}"/>' +
- '<field name="int_field" readonly="1"/>' +
- '</tree>',
- });
-
- assert.hasClass(list.$('.o_data_row:first .o_data_cell:first'), 'o_readonly_modifier');
- assert.doesNotHaveClass(list.$('.o_data_row:nth(1) .o_data_cell:first'), 'o_readonly_modifier');
-
- // try to enter first row in edition
- await testUtils.dom.click(list.$('.o_data_row .o_data_cell:first'));
-
- assert.hasClass(list.$('.o_data_row:first'), 'o_selected_row');
- assert.strictEqual(document.activeElement, list.$('.o_selected_row .o_field_widget[name=m2o]').get(0));
-
- // press tab to move to next focusable field (next line here)
- $(document.activeElement).trigger($.Event('keydown', {which: $.ui.keyCode.TAB}));
- await testUtils.nextTick();
- assert.hasClass(list.$('.o_data_row:nth(1)'), 'o_selected_row');
- assert.strictEqual(document.activeElement, list.$('.o_selected_row .o_field_many2one input').get(0));
-
- list.destroy();
- });
-
QUnit.test('edition, then navigation with tab (with a readonly field)', async function (assert) {
// This test makes sure that if we have 2 cells in a row, the first in
// edit mode, and the second one readonly, then if we edit and press TAB,
@@ -5117,8 +5422,34 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('editable list view: single edition with selected records', async function (assert) {
+ assert.expect(2);
+
+ const list = await createView({
+ arch: `<tree editable="top"><field name="foo"/></tree>`,
+ data: this.data,
+ model: 'foo',
+ View: ListView,
+ });
+
+ // Select first record
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+
+ // Edit the second
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_data_cell:first()'));
+ await testUtils.fields.editInput(list.$('.o_data_row:eq(1) .o_data_cell:first() input'), "oui");
+ await testUtils.dom.click($('.o_list_button_save'));
+
+ assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell:first()').text(), "yop",
+ "First row should remain unchanged");
+ assert.strictEqual(list.$('.o_data_row:eq(1) .o_data_cell:first()').text(), "oui",
+ "Second row should have been updated");
+
+ list.destroy();
+ });
+
QUnit.test('editable list view: multi edition', async function (assert) {
- assert.expect(22);
+ assert.expect(24);
var list = await createView({
View: ListView,
@@ -5167,8 +5498,6 @@ QUnit.module('Views', {
assert.verifySteps(['create', 'read']);
// edit a field
- // We deliberately unselect the first row to check the multi edit union (recordId + selectedRecordIds)
- await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(1)'));
await testUtils.fields.editInput(list.$('.o_field_widget[name=int_field]'), 666);
await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(0)'));
@@ -5176,6 +5505,8 @@ QUnit.module('Views', {
await testUtils.dom.click($('.modal .btn:contains(Cancel)'));
assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), 'yop10',
"changes have been discarded and row is back to readonly");
+ assert.strictEqual(document.activeElement, list.$('.o_data_row:eq(0) .o_data_cell:eq(1)')[0],
+ "focus should be given to the most recently edited cell after discard");
await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(1)'));
await testUtils.fields.editInput(list.$('.o_field_widget[name=int_field]'), 666);
await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_data_cell:eq(0)'));
@@ -5188,12 +5519,70 @@ QUnit.module('Views', {
assert.strictEqual(list.$('.o_data_row:eq(1) .o_data_cell').text(), "blip666",
"the second row should be updated");
assert.containsNone(list, '.o_data_cell input.o_field_widget', "no field should be editable anymore");
+ assert.strictEqual(document.activeElement, list.$('.o_data_row:eq(0) .o_data_cell:eq(1)')[0],
+ "focus should be given to the most recently edited cell after confirm");
+
+ list.destroy();
+ });
+
+ QUnit.test('editable list view: multi edition and onchanges', async function (assert) {
+ assert.expect(10);
+
+ this.data.foo.onchanges = {
+ foo: function (obj) {
+ obj.int_field = obj.foo.length;
+ },
+ };
+ var list = await createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: '<tree editable="bottom">' +
+ '<field name="foo"/>' +
+ '<field name="int_field"/>' +
+ '</tree>',
+ mockRPC: function (route, args) {
+ assert.step(args.method || route);
+ if (args.method === 'write') {
+ args.args[1].int_field = args.args[1].foo.length;
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ // edit a single record to validate that onchanges work
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(0)'));
+ await testUtils.fields.editInput(list.$('.o_field_widget[name=foo]'), 'hi');
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(1)'));
+ await testUtils.dom.click(list.$('.o_list_button_discard'));
+
+ assert.containsOnce(document.body, '.modal'); // discard dialog
+ await testUtils.dom.click($('.modal .btn-primary'));
+
+ assert.verifySteps(['/web/dataset/search_read', 'onchange']);
+
+ // select two records
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
+
+ // edit foo, first row
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(0)'));
+ await testUtils.fields.editInput(list.$('.o_field_widget[name=foo]'), 'hello');
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(1)'));
+
+ assert.containsOnce(document.body, '.modal'); // save dialog
+ await testUtils.dom.click($('.modal .btn-primary'));
+
+ assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), "hello5");
+ assert.strictEqual(list.$('.o_data_row:eq(1) .o_data_cell').text(), "hello5");
+
+ assert.verifySteps(['write', 'read'], "should not perform the onchange in multi edition");
list.destroy();
});
QUnit.test('editable list view: multi edition error and cancellation handling', async function (assert) {
- assert.expect(3);
+ assert.expect(12);
var list = await createView({
View: ListView,
@@ -5201,25 +5590,151 @@ QUnit.module('Views', {
data: this.data,
arch: '<tree editable="bottom">' +
'<field name="foo" required="1"/>' +
+ '<field name="int_field"/>' +
'</tree>',
});
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
+
// select two records
await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
// edit a line and cancel
await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(0)'));
+ assert.containsNone(list, '.o_list_record_selector input:enabled');
await testUtils.fields.editInput(list.$('.o_selected_row .o_field_widget[name=foo]'), "abc");
await testUtils.dom.click($('.modal .btn:contains("Cancel")'));
- assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), 'yop', "first cell should have discarded any change");
+ assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), 'yop10', "first cell should have discarded any change");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
+
+ // edit a line with an invalid format type
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(1)'));
+ assert.containsNone(list, '.o_list_record_selector input:enabled');
+ await testUtils.fields.editInput(list.$('.o_selected_row .o_field_widget[name=int_field]'), "hahaha");
+ assert.containsOnce(document.body, '.modal', "there should be an opened modal");
+ await testUtils.dom.click($('.modal .btn-primary'));
+ assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), 'yop10', "changes should be discarded");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
// edit a line with an invalid value
await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(0)'));
+ assert.containsNone(list, '.o_list_record_selector input:enabled');
await testUtils.fields.editInput(list.$('.o_selected_row .o_field_widget[name=foo]'), "");
assert.containsOnce(document.body, '.modal', "there should be an opened modal");
await testUtils.dom.click($('.modal .btn-primary'));
- assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), 'yop', "changes should be discarded");
+ assert.strictEqual(list.$('.o_data_row:eq(0) .o_data_cell').text(), 'yop10', "changes should be discarded");
+ assert.containsN(list, '.o_list_record_selector input:enabled', 5);
+
+ list.destroy();
+ });
+
+ QUnit.test('editable list view: multi edition of many2one: set same value', async function (assert) {
+ assert.expect(4);
+
+ var list = await createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: '<tree editable="bottom">' +
+ '<field name="foo"/>' +
+ '<field name="m2o"/>' +
+ '</tree>',
+ mockRPC: function (route, args) {
+ if (args.method === 'write') {
+ assert.deepEqual(args.args, [[1, 2, 3, 4], { m2o: 1 }],
+ "should force write value on all selected records");
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.strictEqual(list.$('.o_list_many2one').text(), "Value 1Value 2Value 1Value 1");
+
+ // select all records (the first one has value 1 for m2o)
+ await testUtils.dom.click(list.$('thead .o_list_record_selector input'));
+
+ // set m2o to 1 in first record
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(1)'));
+ await testUtils.fields.many2one.searchAndClickItem('m2o', {search: 'Value 1'});
+
+ assert.containsOnce(document.body, '.modal');
+
+ await testUtils.dom.click($('.modal .modal-footer .btn-primary'));
+
+ assert.strictEqual(list.$('.o_list_many2one').text(), "Value 1Value 1Value 1Value 1");
+
+ list.destroy();
+ });
+
+ QUnit.test('editable list view: clicking on "Discard changes" in multi edition', async function (assert) {
+ assert.expect(2);
+
+ const list = await createView({
+ arch: `
+ <tree editable="top">
+ <field name="foo"/>
+ </tree>`,
+ data: this.data,
+ model: 'foo',
+ View: ListView,
+ });
+
+ // select two records
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
+
+ await testUtils.dom.click(list.$('.o_data_row:first() .o_data_cell:first()'));
+ list.$('.o_data_row:first() .o_data_cell:first() input').val("oof");
+
+ const $discardButton = list.$buttons.find('.o_list_button_discard');
+
+ // Simulates an actual click (event chain is: mousedown > change > blur > focus > mouseup > click)
+ await testUtils.dom.triggerEvents($discardButton, ['mousedown']);
+ await testUtils.dom.triggerEvents(list.$('.o_data_row:first() .o_data_cell:first() input'),
+ ['change', 'blur', 'focusout']);
+ await testUtils.dom.triggerEvents($discardButton, ['focus']);
+ $discardButton[0].dispatchEvent(new MouseEvent('mouseup'));
+ await testUtils.dom.click($discardButton);
+
+ assert.ok($('.modal').text().includes("Warning"), "Modal should ask to discard changes");
+ await testUtils.dom.click($('.modal .btn-primary'));
+
+ assert.strictEqual(list.$('.o_data_row:first() .o_data_cell:first()').text(), "yop");
+
+ list.destroy();
+ });
+
+ QUnit.test('editable list view (multi edition): mousedown on "Discard", but mouseup somewhere else', async function (assert) {
+ assert.expect(1);
+
+ const list = await createView({
+ arch: `
+ <tree editable="top">
+ <field name="foo"/>
+ </tree>`,
+ data: this.data,
+ model: 'foo',
+ View: ListView,
+ });
+
+ // select two records
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_list_record_selector input'));
+ await testUtils.dom.click(list.$('.o_data_row:eq(1) .o_list_record_selector input'));
+
+ await testUtils.dom.click(list.$('.o_data_row:first() .o_data_cell:first()'));
+ list.$('.o_data_row:first() .o_data_cell:first() input').val("oof");
+
+ // Simulates a pseudo drag and drop
+ await testUtils.dom.triggerEvents(list.$buttons.find('.o_list_button_discard'), ['mousedown']);
+ await testUtils.dom.triggerEvents(list.$('.o_data_row:first() .o_data_cell:first() input'),
+ ['change', 'blur', 'focusout']);
+ await testUtils.dom.triggerEvents($(document.body), ['focus']);
+ window.dispatchEvent(new MouseEvent('mouseup'));
+ await testUtils.nextTick();
+
+ assert.ok($('.modal').text().includes("Confirmation"), "Modal should ask to save changes");
+ await testUtils.dom.click($('.modal .btn-primary'));
list.destroy();
});
@@ -5265,6 +5780,65 @@ QUnit.module('Views', {
list.destroy();
});
+ QUnit.test('editable list view: many2one with readonly modifier', async function (assert) {
+ assert.expect(2);
+
+ const list = await createView({
+ arch:
+ `<tree editable="top">
+ <field name="m2o" readonly="1"/>
+ <field name="foo"/>
+ </tree>`,
+ data: this.data,
+ model: 'foo',
+ View: ListView,
+ });
+
+ // edit a field
+ await testUtils.dom.click(list.$('.o_data_row:eq(0) .o_data_cell:eq(0)'));
+
+ assert.containsOnce(list, '.o_data_row:eq(0) .o_data_cell:eq(0) a[name="m2o"]');
+ assert.strictEqual(document.activeElement, list.$('.o_data_row:eq(0) .o_data_cell:eq(1) input')[0],
+ "focus should go to the char input");
+
+ list.destroy();
+ });
+
+ QUnit.test('editable list view: multi edition: edit and validate last row', async function (assert) {
+ assert.expect(3);
+
+ var list = await createView({
+ View: ListView,
+ model: 'foo',
+ data: this.data,
+ arch: '<tree editable="bottom">' +
+ '<field name="foo"/>' +
+ '<field name="int_field"/>' +
+ '</tree>',
+ // in this test, we want to accurately mock what really happens, that is, input
+ // fields only trigger their changes on 'change' event, not on 'input'
+ fieldDebounce: 100000,
+ });
+
+ assert.containsN(list, '.o_data_row', 4);
+
+ // select all records
+ await testUtils.dom.click(list.$('.o_list_view thead .o_list_record_selector input'));
+
+ // edit last cell of last line
+ await testUtils.dom.click(list.$('.o_data_row:last .o_data_cell:last'));
+ testUtils.fields.editInput(list.$('.o_field_widget[name=int_field]'), '666');
+ await testUtils.fields.triggerKeydown(list.$('tr.o_selected_row .o_data_cell:last input'), 'enter');
+
+ assert.containsOnce(document.body, '.modal');
+ await testUtils.dom.click($('.modal .btn-primary'));
+
+ assert.containsN(list, '.o_data_row', 4,
+ "should not create a new row as we were in multi edition");
+
+ list.destroy();
+ });
+
QUnit.test('list grouped by date:month', async function (assert) {
assert.expect(1);
diff --git a/addons/web/static/tests/views/mobile_control_panel_tests.js b/addons/web/static/tests/views/mobile_control_panel_tests.js
index 19226741474..be0d197ef44 100644
--- a/addons/web/static/tests/views/mobile_control_panel_tests.js
+++ b/addons/web/static/tests/views/mobile_control_panel_tests.js
@@ -39,8 +39,61 @@ QUnit.module('Mobile Search view Screen', {
};
},
}, function () {
- QUnit.test('can activate a filter with mobile search view', async function (assert) {
- assert.expect(3);
+ QUnit.test('can activate a filter with mobile search view in quick search mode', async function (assert) {
+ assert.expect(7);
+
+ var searchRPCFlag = false;
+
+ var actionManager = await createActionManager({
+ actions: this.actions,
+ archs: this.archs,
+ data: this.data,
+ mockRPC: function (route, args) {
+ if (searchRPCFlag) {
+ assert.deepEqual(args.domain, [['foo', 'ilike', 'A']],
+ "domain should have been properly transferred to list view");
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ await actionManager.doAction(1);
+
+ assert.strictEqual($('button.o_enable_searchview.fa-search').length, 1,
+ "should display a button to open the searchview");
+ assert.deepEqual($('.o_searchview_input_container:visible').length, 0,
+ "Quick search input should be hidden");
+
+ // open the search view
+ await testUtils.dom.click($('button.o_enable_searchview'));
+ assert.deepEqual($('.o_toggle_searchview_full:visible').length, 1,
+ "should display a button to expand the searchview");
+ assert.deepEqual($('.o_searchview_input_container:visible').length, 1,
+ "Quick search input should now be visible");
+
+ searchRPCFlag = true;
+
+ // use quick search input
+ $('.o_searchview_input')
+ .val("A")
+ .trigger($.Event('keypress', { which: 65, keyCode: 65 }));
+ await testUtils.nextTick();
+ actionManager.$('.o_searchview_input')
+ .trigger($.Event('keydown', { which: $.ui.keyCode.ENTER, keyCode: $.ui.keyCode.ENTER }));
+ await testUtils.nextTick();
+
+ // close quick search
+ await testUtils.dom.click($('button.o_enable_searchview.fa-close'));
+ assert.deepEqual($('.o_toggle_searchview_full:visible').length, 0,
+ "Expand icon shoud be hidden");
+ assert.deepEqual($('.o_searchview_input_container:visible').length, 0,
+ "Quick search input should be hidden");
+
+ actionManager.destroy();
+ });
+
+ QUnit.test('can activate a filter with mobile search view in full screen mode', async function (assert) {
+ assert.expect(4);
var filterActiveFlag = false;
@@ -61,20 +114,25 @@ QUnit.module('Mobile Search view Screen', {
assert.ok(!$('.o_mobile_search').is(':visible'),
'mobile search view is not visible');
+
// open the search view
await testUtils.dom.click($('button.o_enable_searchview'));
-
+ // open it in full screen
+ await testUtils.dom.click($('.o_toggle_searchview_full'));
assert.ok($('.o_mobile_search').is(':visible'),
'mobile search view is visible');
// open filter sub menu
await testUtils.dom.click($('button.o_dropdown_toggler_btn').first());
-
filterActiveFlag = true;
-
// click on Active filter
await testUtils.dom.click($('.o_filters_menu a:contains(Active)'));
+ // closing search view
+ await testUtils.dom.click($('.o_mobile_search_close'));
+ assert.ok(!$('.o_mobile_search').is(':visible'),
+ 'mobile search view is not visible');
+
actionManager.destroy();
});
diff --git a/addons/web/static/tests/views/search_panel_tests.js b/addons/web/static/tests/views/search_panel_tests.js
index e580819e0ac..632158d9b1e 100644
--- a/addons/web/static/tests/views/search_panel_tests.js
+++ b/addons/web/static/tests/views/search_panel_tests.js
@@ -571,6 +571,64 @@ QUnit.module('Views', {
kanban.destroy();
});
+ QUnit.test('category has been archived', async function (assert) {
+ assert.expect(2);
+
+ this.data.company.fields.active = {type: 'boolean', string: 'Archived'};
+ this.data.company.records = [
+ {
+ name: 'Company 5',
+ id: 5,
+ active: true,
+ }, {
+ name: 'child of 5 archived',
+ parent_id: 5,
+ id: 666,
+ active: false,
+ }, {
+ name: 'child of 666',
+ parent_id: 666,
+ id: 777,
+ active: true,
+ }
+ ];
+
+ var kanban = await createView({
+ View: KanbanView,
+ model: 'partner',
+ data: this.data,
+ arch: `
+ <kanban>
+ <templates>
+ <t t-name="kanban-box">
+ <div>
+ <field name="foo"/>
+ </div>
+ </t>
+ </templates>
+ </kanban>`,
+ archs: {
+ 'partner,false,search': `<search><searchpanel><field name="company_id"/></searchpanel></search>`,
+ },
+ mockRPC: async function (route, args) {
+ if (route === '/web/dataset/call_kw/partner/search_panel_select_range') {
+ var results = await this._super.apply(this, arguments);
+ results.values = results.values.filter(rec => rec.active !== false);
+ return Promise.resolve(results);
+ }
+ return this._super.apply(this, arguments);
+ },
+ });
+
+ assert.containsN(kanban, '.o_search_panel_category_value', 2,
+ 'The number of categories should be 2: All and Company 5');
+
+ assert.containsNone(kanban, '.o_toggle_fold',
+ 'None of the categories should have children');
+
+ kanban.destroy();
+ });
+
QUnit.test('use two categories to refine search', async function (assert) {
assert.expect(14);
@@ -2064,27 +2122,57 @@ QUnit.module('Views', {
actionManager.destroy();
});
- QUnit.test('disable search panel onExecuteAction', async function (assert) {
- assert.expect(6);
+ QUnit.test('after onExecuteAction, selects "All" as default category value', async function (assert) {
+ assert.expect(4);
+
+ var Storage = RamStorage.extend({
+ getItem: function (key) {
+ assert.step('getItem ' + key);
+ return 3; // 'asustek'
+ },
+ setItem: function (key, value) {
+ assert.step('setItem ' + key + ' to ' + value);
+ },
+ });
+ var RamStorageService = AbstractStorageService.extend({
+ storage: new Storage(),
+ });
var actionManager = await createActionManager({
actions: this.actions,
archs: this.archs,
data: this.data,
- services: this.services,
+ services: {
+ local_storage: RamStorageService,
+ },
});
await actionManager.doAction(2);
-
await testUtils.dom.click(actionManager.$('.o_form_view button:contains("multi view")'));
+
assert.containsOnce(actionManager, '.o_kanban_view');
- assert.containsNone(actionManager, '.o_search_panel');
+ assert.containsOnce(actionManager, '.o_search_panel');
+ assert.containsOnce(actionManager, '.o_search_panel_category_value:first .active');
- await testUtils.dom.click(actionManager.$('.o_cp_switch_list'));
- assert.containsOnce(actionManager, '.o_list_view');
- assert.containsNone(actionManager, '.o_search_panel');
+ assert.verifySteps([]); // should not communicate with localStorage
+
+ actionManager.destroy();
+ });
+
+ QUnit.test('search panel is not instantiated if stated in context', async function (assert) {
+ assert.expect(2);
+
+ this.actions[0].context = {search_panel: false};
+ var actionManager = await createActionManager({
+ actions: this.actions,
+ archs: this.archs,
+ data: this.data,
+ services: this.services,
+ });
+
+ await actionManager.doAction(2);
+ await testUtils.dom.click(actionManager.$('.o_form_view button:contains("multi view")'));
- await testUtils.dom.click(actionManager.$('.o_cp_switch_kanban'));
assert.containsOnce(actionManager, '.o_kanban_view');
assert.containsNone(actionManager, '.o_search_panel');
diff --git a/addons/web/static/tests/widgets/domain_selector_tests.js b/addons/web/static/tests/widgets/domain_selector_tests.js
index 305315b72c6..8c246fd8399 100644
--- a/addons/web/static/tests/widgets/domain_selector_tests.js
+++ b/addons/web/static/tests/widgets/domain_selector_tests.js
@@ -174,6 +174,7 @@ QUnit.module('DomainSelector', {
await testUtils.dom.clickFirst($('.bootstrap-datetimepicker-widget :not(.today)[data-action="selectDay"]'));
assert.notEqual(domainSelector.$(".o_datepicker:visible input").val(), val,
"datepicker value should have changed");
+ await testUtils.dom.click($('.bootstrap-datetimepicker-widget a[data-action=close]'));
domainSelector.destroy();
});
diff --git a/addons/web/tests/__init__.py b/addons/web/tests/__init__.py
index 1ed329bafe1..690fab494d3 100644
--- a/addons/web/tests/__init__.py
+++ b/addons/web/tests/__init__.py
@@ -6,3 +6,4 @@ from . import test_js
from . import test_menu
from . import test_serving_base
from . import test_click_everywhere
+from . import test_list_controller
diff --git a/addons/web/tests/test_image.py b/addons/web/tests/test_image.py
index 9d7b1d872e4..0795d78c925 100644
--- a/addons/web/tests/test_image.py
+++ b/addons/web/tests/test_image.py
@@ -19,23 +19,18 @@ class TestImage(HttpCase):
image = Image.open(io.BytesIO(response.content))
self.assertEqual(image.size, (150, 150))
- # CASE: resize placeholder to small
- response = self.url_open('/web/image/fake/0/image_64')
- image = Image.open(io.BytesIO(response.content))
- self.assertEqual(image.size, (64, 64))
-
- # CASE: resize placeholder to medium
+ # CASE: resize placeholder to 128
response = self.url_open('/web/image/fake/0/image_128')
image = Image.open(io.BytesIO(response.content))
self.assertEqual(image.size, (128, 128))
- # CASE: resize placeholder to large
+ # CASE: resize placeholder to 256
response = self.url_open('/web/image/fake/0/image_256')
image = Image.open(io.BytesIO(response.content))
self.assertEqual(image.size, (256, 256))
- # CASE: resize placeholder to big (but placeholder image is too small)
- response = self.url_open('/web/image/fake/0/image')
+ # CASE: resize placeholder to 1024 (but placeholder image is too small)
+ response = self.url_open('/web/image/fake/0/image_1024')
image = Image.open(io.BytesIO(response.content))
self.assertEqual(image.size, (256, 256))
diff --git a/addons/web/tests/test_list_controller.py b/addons/web/tests/test_list_controller.py
new file mode 100644
index 00000000000..311def2989f
--- /dev/null
+++ b/addons/web/tests/test_list_controller.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+from ..controllers.list_controller import TableListExporter
+from odoo.tests.common import HttpCase
+
+class WorksheetMock(dict):
+
+ def write(self, x, y, value, style=None):
+ if (x, y) in self:
+ raise Exception("Cannot rewrite cell [{}, {}]".format(x, y))
+ self[x, y] = value
+
+class ListController(HttpCase):
+
+ def test_list_download(self):
+ controller = TableListExporter()
+
+ columns = [
+ {'field': "foo", 'string': "Foo"},
+ {'field': "bar", 'string': "Bar"},
+ {'field': "int_field", 'aggregateValue': 19, 'string': "int_field"},
+ ]
+ groups = [{
+ # Group "yop"
+ 'isGrouped': True,
+ 'count': 1,
+ 'aggregateValues': {'int_field': 19},
+ 'hideHeader': False,
+ 'value': "yop",
+ 'data': [{
+ # Group "yop > true"
+ 'isGrouped': False,
+ 'count': 1,
+ 'aggregateValues': {'int_field': 10},
+ 'hideHeader': False,
+ 'value': "true",
+ 'data': [{'foo': "yop", 'bar': "True", 'int_field': 10}],
+ }, {
+ # Group "yop > false"
+ 'isGrouped': False,
+ 'count': 10,
+ 'aggregateValues': {'int_field': 9},
+ 'hideHeader': False,
+ 'value': "false",
+ 'data': [],
+ }],
+ }]
+
+ worksheet = WorksheetMock()
+ controller._write_worksheet(worksheet, {'columns': columns, 'groups': groups})
+
+ # Header
+ self.assertEqual(worksheet[0, 0], 'Foo')
+ self.assertEqual(worksheet[0, 1], 'Bar')
+ self.assertEqual(worksheet[0, 2], 'int_field')
+
+ # Main group
+ self.assertEqual(worksheet[1, 0], 'yop (1)', "Group header")
+ self.assertEqual(worksheet[1, 2], 19, "int_field aggregate value")
+
+ # First sub-group (open)
+ self.assertEqual(worksheet[2, 0], '>true (1)', "subgroup header")
+ self.assertEqual(worksheet[2, 2], 10, "int_field aggregate value")
+
+ # data
+ self.assertEqual(worksheet[3, 0], 'yop')
+ self.assertEqual(worksheet[3, 1], 'True')
+ self.assertEqual(worksheet[3, 2], 10)
+
+ # second sub-group (closed)
+ self.assertEqual(worksheet[4, 0], '>false (10)', "second sub-group header")
+ self.assertEqual(worksheet[4, 2], 9, "int_field aggregate value")
+
+ self.assertEqual(worksheet[5, 2], 19, "main list int_field aggregate value")