diff options
| author | Christophe Simonis <chs@odoo.com> | 2019-09-20 17:33:22 +0200 |
|---|---|---|
| committer | Christophe Simonis <chs@odoo.com> | 2019-09-20 17:34:45 +0200 |
| commit | 64e43808b79badb5869a8d73cc1cc3f3b3aa8e12 (patch) | |
| tree | 9a22d5f6c03073a4d10faedea8df23a5211e8b8f /addons/web | |
| parent | 944891ced081cda3b8b3db5faf3b7ac23b6b4ce8 (diff) | |
| parent | 58a83d12228fbbd4e9dde542e133d264204ee0f3 (diff) | |
[MERGE] forward port branch saas-12.5 up to 58a83d12228
Diffstat (limited to 'addons/web')
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 "" " <body class=\"ie9\">\n" " <![endif]-->" msgstr "" +"<!--[if lt IE 10]>\n" +" <body class=\"ie9\">\n" +" <![endif]-->" #. module: web #. openerp-web #: code:addons/web/static/src/xml/notification.xml:0 #, python-format msgid "×" -msgstr "" +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 "" +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 &copy;</span>" -msgstr "" +msgstr "<span>Copyright &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 "" +"<!--[if lt IE 10]>\n" +" <body class=\"ie9\">\n" +" <![endif]-->" +msgstr "" + +#. module: web +#. openerp-web +#: code:addons/web/static/src/xml/notification.xml:0 +#, python-format +msgid "×" +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 &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(' ', '') + }); + 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") |
