From 9341a5d69098f1283ec0b80aa2ac4818ea97991b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=BB=20=D0=92=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B1=D1=8C=D0=B5=D0=B2?= Date: Fri, 3 May 2024 12:34:42 +0000 Subject: [PATCH] initial commit --- __init__.py | 4 + __manifest__.py | 33 + __pycache__/__init__.cpython-311.pyc | Bin 0 -> 213 bytes i18n/ar.po | 187 +++++ i18n/az.po | 178 +++++ i18n/bg.po | 194 +++++ i18n/bs.po | 178 +++++ i18n/ca.po | 195 +++++ i18n/cs.po | 190 +++++ i18n/da.po | 189 +++++ i18n/de.po | 191 +++++ i18n/el.po | 178 +++++ i18n/es.po | 193 +++++ i18n/es_419.po | 193 +++++ i18n/et.po | 196 +++++ i18n/fa.po | 192 +++++ i18n/fi.po | 197 +++++ i18n/fr.po | 192 +++++ i18n/gu.po | 177 +++++ i18n/he.po | 192 +++++ i18n/hr.po | 182 +++++ i18n/hu.po | 192 +++++ i18n/hy.po | 183 +++++ i18n/id.po | 189 +++++ i18n/is.po | 183 +++++ i18n/it.po | 189 +++++ i18n/ja.po | 188 +++++ i18n/km.po | 176 +++++ i18n/ko.po | 188 +++++ i18n/lb.po | 173 ++++ i18n/lt.po | 194 +++++ i18n/lv.po | 191 +++++ i18n/mn.po | 181 +++++ i18n/nb.po | 180 +++++ i18n/nl.po | 189 +++++ i18n/pl.po | 189 +++++ i18n/pt.po | 187 +++++ i18n/pt_BR.po | 191 +++++ i18n/ro.po | 180 +++++ i18n/ru.po | 194 +++++ i18n/sk.po | 189 +++++ i18n/sl.po | 193 +++++ i18n/sr.po | 191 +++++ i18n/sr@latin.po | 177 +++++ i18n/sv.po | 194 +++++ i18n/th.po | 188 +++++ i18n/tr.po | 196 +++++ i18n/uk.po | 189 +++++ i18n/vi.po | 190 +++++ i18n/web_tour.pot | 183 +++++ i18n/zh_CN.po | 188 +++++ i18n/zh_TW.po | 188 +++++ models/__init__.py | 5 + models/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 264 bytes models/__pycache__/ir_http.cpython-311.pyc | Bin 0 -> 1270 bytes models/__pycache__/tour.cpython-311.pyc | Bin 0 -> 2070 bytes models/ir_http.py | 16 + models/tour.py | 30 + security/ir.model.access.csv | 3 + security/ir.rule.csv | 2 + static/src/debug/debug_manager.js | 49 ++ static/src/debug/tour_dialog_component.js | 43 + static/src/debug/tour_dialog_component.xml | 62 ++ static/src/tour_pointer/tour_pointer.js | 151 ++++ static/src/tour_pointer/tour_pointer.scss | 232 ++++++ static/src/tour_pointer/tour_pointer.xml | 30 + static/src/tour_service/tour_compilers.js | 432 ++++++++++ static/src/tour_service/tour_pointer_state.js | 181 +++++ static/src/tour_service/tour_service.js | 412 ++++++++++ static/src/tour_service/tour_state.js | 85 ++ static/src/tour_service/tour_utils.js | 654 +++++++++++++++ static/tests/debug_manager_tests.js | 87 ++ static/tests/tour_service_tests.js | 742 ++++++++++++++++++ views/tour_views.xml | 46 ++ 74 files changed, 12496 insertions(+) create mode 100644 __init__.py create mode 100644 __manifest__.py create mode 100644 __pycache__/__init__.cpython-311.pyc create mode 100644 i18n/ar.po create mode 100644 i18n/az.po create mode 100644 i18n/bg.po create mode 100644 i18n/bs.po create mode 100644 i18n/ca.po create mode 100644 i18n/cs.po create mode 100644 i18n/da.po create mode 100644 i18n/de.po create mode 100644 i18n/el.po create mode 100644 i18n/es.po create mode 100644 i18n/es_419.po create mode 100644 i18n/et.po create mode 100644 i18n/fa.po create mode 100644 i18n/fi.po create mode 100644 i18n/fr.po create mode 100644 i18n/gu.po create mode 100644 i18n/he.po create mode 100644 i18n/hr.po create mode 100644 i18n/hu.po create mode 100644 i18n/hy.po create mode 100644 i18n/id.po create mode 100644 i18n/is.po create mode 100644 i18n/it.po create mode 100644 i18n/ja.po create mode 100644 i18n/km.po create mode 100644 i18n/ko.po create mode 100644 i18n/lb.po create mode 100644 i18n/lt.po create mode 100644 i18n/lv.po create mode 100644 i18n/mn.po create mode 100644 i18n/nb.po create mode 100644 i18n/nl.po create mode 100644 i18n/pl.po create mode 100644 i18n/pt.po create mode 100644 i18n/pt_BR.po create mode 100644 i18n/ro.po create mode 100644 i18n/ru.po create mode 100644 i18n/sk.po create mode 100644 i18n/sl.po create mode 100644 i18n/sr.po create mode 100644 i18n/sr@latin.po create mode 100644 i18n/sv.po create mode 100644 i18n/th.po create mode 100644 i18n/tr.po create mode 100644 i18n/uk.po create mode 100644 i18n/vi.po create mode 100644 i18n/web_tour.pot create mode 100644 i18n/zh_CN.po create mode 100644 i18n/zh_TW.po create mode 100644 models/__init__.py create mode 100644 models/__pycache__/__init__.cpython-311.pyc create mode 100644 models/__pycache__/ir_http.cpython-311.pyc create mode 100644 models/__pycache__/tour.cpython-311.pyc create mode 100644 models/ir_http.py create mode 100644 models/tour.py create mode 100644 security/ir.model.access.csv create mode 100644 security/ir.rule.csv create mode 100644 static/src/debug/debug_manager.js create mode 100644 static/src/debug/tour_dialog_component.js create mode 100644 static/src/debug/tour_dialog_component.xml create mode 100644 static/src/tour_pointer/tour_pointer.js create mode 100644 static/src/tour_pointer/tour_pointer.scss create mode 100644 static/src/tour_pointer/tour_pointer.xml create mode 100644 static/src/tour_service/tour_compilers.js create mode 100644 static/src/tour_service/tour_pointer_state.js create mode 100644 static/src/tour_service/tour_service.js create mode 100644 static/src/tour_service/tour_state.js create mode 100644 static/src/tour_service/tour_utils.js create mode 100644 static/tests/debug_manager_tests.js create mode 100644 static/tests/tour_service_tests.js create mode 100644 views/tour_views.xml diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..dc5e6b6 --- /dev/null +++ b/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import models diff --git a/__manifest__.py b/__manifest__.py new file mode 100644 index 0000000..71ad088 --- /dev/null +++ b/__manifest__.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +{ + 'name': 'Tours', + 'category': 'Hidden', + 'description': """ +Odoo Web tours. +======================== + +""", + 'version': '0.1', + 'depends': ['web'], + 'data': [ + 'security/ir.model.access.csv', + 'security/ir.rule.csv', + 'views/tour_views.xml' + ], + 'assets': { + 'web.assets_backend': [ + 'web_tour/static/src/**/*', + ], + 'web.assets_frontend': [ + 'web_tour/static/src/tour_pointer/**/*', + 'web_tour/static/src/tour_service/**/*', + ], + 'web.qunit_suite_tests': [ + 'web_tour/static/tests/**/*', + ], + }, + 'auto_install': True, + 'license': 'LGPL-3', +} diff --git a/__pycache__/__init__.cpython-311.pyc b/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a2c07343c36bc740676275a158ee1b71d44e4226 GIT binary patch literal 213 zcmZ3^%ge<81Z;bC(kg-UV-N=hn4pZ$LO{lJh7^Vr#vF!R#wbQch7_h?22JLdj6exZ z##?N;`6;P6#eSMhw-}0;fnqBeK7;iBveeJW&rQ`&NlnU3%+t?L$$Jf0$Efn4=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "عمل رائع! لقد تخطيت كافة مراحل هذه الجولة." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "اضغط على أيقونة الصفحة الرئيسية للتنقل بين التطبيقات. " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "إغلاق" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "يستهلك بواسطة" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "تعطيل الجولات " + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "اسم العرض " + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "مسار HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "المُعرف" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "القائمة" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "الاسم" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "جولات التمهيد " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "فتح القائمة " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "المسار " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "قم بالتمرير لأسفل للوصول إلى الخطوة التالية. " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "قم بالتمرير لأعلى للوصول إلى الخطوة التالية. " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "تسلسل " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "بدء" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "بدء الجولة " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "بدء جولة" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "اختبار" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "جولة تجريبية " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "الجولات التجريبية " + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "نصيحة " + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "إسم الجولة" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "الجولات " diff --git a/i18n/az.po b/i18n/az.po new file mode 100644 index 0000000..34114ef --- /dev/null +++ b/i18n/az.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Jumshud Sultanov , 2022 +# erpgo translator , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~14.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2022-09-22 05:56+0000\n" +"Last-Translator: erpgo translator , 2022\n" +"Language-Team: Azerbaijani (https://app.transifex.com/odoo/teams/41243/az/)\n" +"Language: az\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "Yaxşı iş! Bu turun bütün addımlarını keçdiniz." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Tərəfindən istehlak olunur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Ekran Adı" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Marşrutizasiyası" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menyu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Ad" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Yol" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Ardıcıllıq" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Başlayın" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Tura Başlayın" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Turun adı" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Turlar" diff --git a/i18n/bg.po b/i18n/bg.po new file mode 100644 index 0000000..69871d9 --- /dev/null +++ b/i18n/bg.po @@ -0,0 +1,194 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# KeyVillage, 2023 +# aleksandar ivanov, 2023 +# Albena Mincheva , 2023 +# Martin Trigaux, 2023 +# Maria Boyadjieva , 2023 +# Rosen Vladimirov , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Rosen Vladimirov , 2023\n" +"Language-Team: Bulgarian (https://app.transifex.com/odoo/teams/41243/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Добра работа!Преминахте през всички стъпки на това " +"обучение." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Затвори" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Консумиран от" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Деактивирайте обиколките" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Име за Показване" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Меню" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Име" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Път" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Последователност" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Стартирайте" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Започни обиколка" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Започнете обиколка" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Тест" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Съвет" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Име на обиколка" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tours" diff --git a/i18n/bs.po b/i18n/bs.po new file mode 100644 index 0000000..0c907a5 --- /dev/null +++ b/i18n/bs.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Martin Trigaux, 2018 +# Boško Stojaković , 2018 +# Bole , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2018-09-21 13:18+0000\n" +"Last-Translator: Bole , 2018\n" +"Language-Team: Bosnian (https://www.transifex.com/odoo/teams/41243/bs/)\n" +"Language: bs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meni" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Naziv:" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Putanja" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Bakšiš" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Vodiči" diff --git a/i18n/ca.po b/i18n/ca.po new file mode 100644 index 0000000..5656aa2 --- /dev/null +++ b/i18n/ca.po @@ -0,0 +1,195 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# AncesLatino2004, 2023 +# Arnau Ros, 2023 +# Óscar Fonseca , 2023 +# marcescu, 2023 +# Quim - eccit , 2023 +# Lluís Dalmau , 2023 +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Catalan (https://app.transifex.com/odoo/teams/41243/ca/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ca\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Bon treball! Has fet tots els passos d'aquest " +"recorregut." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Feu clic a Icona de l'usuari per navegar per les aplicacions." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Tancar" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumit per" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Inhabilita les visites" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nom mostrat" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutament HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menú" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nom" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Visites d'enboarding" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Obriu el menú del bugger." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Ruta" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Seqüència" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Inicia" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Inicia el recorregut" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Començar recorregut" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Prova la visita" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Proves de visites" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Propina" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nom del recorregut" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Recorreguts" diff --git a/i18n/cs.po b/i18n/cs.po new file mode 100644 index 0000000..882eab5 --- /dev/null +++ b/i18n/cs.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Ivana Bartonkova, 2023 +# Wil Odoo, 2023 +# Jakub Smolka, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jakub Smolka, 2023\n" +"Language-Team: Czech (https://app.transifex.com/odoo/teams/41243/cs/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: cs\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Dobrá práce! Prošli jste všemi kroky této prohlídky." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Zavřít" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Vypnout tutoriály" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Zobrazovací název" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Název" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Tutoriály" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Cesta" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekvence" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Začít" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Začít tutoriál" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Začít tutoriál" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Testovací tutoriál" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Testovací tutoriály" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tutoriály" diff --git a/i18n/da.po b/i18n/da.po new file mode 100644 index 0000000..983b188 --- /dev/null +++ b/i18n/da.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Martin Trigaux, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Martin Trigaux, 2023\n" +"Language-Team: Danish (https://app.transifex.com/odoo/teams/41243/da/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: da\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Godt arbejde!Du gennemgik alle trin i denne " +"rundvisning." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Klik på Hjem ikonet for at navigere på tværs af applikationer." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Luk" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Forbrugt af" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Deaktiver rundvisninger" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Vis navn" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Navn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Åben bugger menu." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Sti" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekvens" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Start rundtur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Start tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test rundvisning" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Navn på rundtur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Rundture" diff --git a/i18n/de.po b/i18n/de.po new file mode 100644 index 0000000..2eef3b9 --- /dev/null +++ b/i18n/de.po @@ -0,0 +1,191 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Larissa Manderfeld, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2023\n" +"Language-Team: German (https://app.transifex.com/odoo/teams/41243/de/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: de\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Gut gemacht! Sie haben alle Schritte dieser Tour " +"absolviert." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Klicken Sie auf das Startsymbol, um durch die Apps zu navigieren." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Schließen" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Verbraucht von" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Tour deaktivieren" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Anzeigename" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-Routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menü" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Name" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Einführungstouren" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Fehlermenü öffnen." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Pfad" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Nach unten scrollen, um zum nächsten Schritt zu gelangen." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Nach oben scrollen, um zum nächsten Schritt zu gelangen." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sequenz" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Tour starten" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Tour starten" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Testtour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Testtouren" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tipp" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Tourname" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Touren" diff --git a/i18n/el.po b/i18n/el.po new file mode 100644 index 0000000..e9bc93c --- /dev/null +++ b/i18n/el.po @@ -0,0 +1,178 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Martin Trigaux, 2018 +# Kostas Goutoudis , 2018 +# George Tarasidis , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2018-09-21 13:18+0000\n" +"Last-Translator: George Tarasidis , 2018\n" +"Language-Team: Greek (https://www.transifex.com/odoo/teams/41243/el/)\n" +"Language: el\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Αναλώθηκαν από" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Απενεργοποίηση Περιηγήσεων" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Εμφάνιση Ονόματος" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "Κωδικός" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Μενού" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Περιγραφή" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Διαδρομή" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Έναρξη Περιήγησης" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Φιλοδώρημα" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Περιγραφή Περιηγήσης" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Περιηγήσεις" diff --git a/i18n/es.po b/i18n/es.po new file mode 100644 index 0000000..cc7781f --- /dev/null +++ b/i18n/es.po @@ -0,0 +1,193 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Lucia Pacheco, 2023 +# Larissa Manderfeld, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Larissa Manderfeld, 2024\n" +"Language-Team: Spanish (https://app.transifex.com/odoo/teams/41243/es/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"¡Bien hecho! Terminó todos los pasos de este " +"recorrido." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Haga clic en el icono de inicio para navegar a través de las " +"aplicaciones." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumido por" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Desactivar recorridos" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nombre mostrado" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP " + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menú" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nombre" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Recorridos de incorporación" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Abrir el menú bugger." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Ruta" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Baje para continuar con el siguiente paso." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Suba para continuar con el siguiente paso." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Secuencia" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Iniciar" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Comenzar recorrido" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Comenzar recorrido" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Recorrido de prueba" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Visitas de prueba" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Consejo" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nombre del recorrido" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Recorridos" diff --git a/i18n/es_419.po b/i18n/es_419.po new file mode 100644 index 0000000..10d8c11 --- /dev/null +++ b/i18n/es_419.po @@ -0,0 +1,193 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Iran Villalobos López, 2023 +# Fernanda Alvarez, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Fernanda Alvarez, 2023\n" +"Language-Team: Spanish (Latin America) (https://app.transifex.com/odoo/teams/41243/es_419/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: es_419\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"¡Bien hecho! Terminó todos los pasos de este " +"recorrido." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Haga clic en el icono de inicio para navegar a través de las " +"aplicaciones." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Cerrar" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumido por" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Desactivar recorridos" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nombre en pantalla" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Enrutamiento HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menú" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nombre" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Recorridos de integración" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Abrir el menú de desarrollador." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Ruta" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Baje para continuar con el siguiente paso." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Suba para continuar con el siguiente paso." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Secuencia" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Iniciar" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Comenzar recorrido" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Comenzar recorrido" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Prueba" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Recorrido de prueba" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Recorridos de prueba" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Consejo" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nombre del recorrido" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Recorridos" diff --git a/i18n/et.po b/i18n/et.po new file mode 100644 index 0000000..7a94e53 --- /dev/null +++ b/i18n/et.po @@ -0,0 +1,196 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Andre Roomet , 2023 +# Piia Paurson , 2023 +# Arma Gedonsky , 2023 +# Rivo Zängov , 2023 +# Leaanika Randmets, 2023 +# Martin Trigaux, 2023 +# Maidu Targama , 2023 +# Anna, 2023 +# Triine Aavik , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Triine Aavik , 2023\n" +"Language-Team: Estonian (https://app.transifex.com/odoo/teams/41243/et/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: et\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Tubli! Käisid läbi kõik selle teekonna etapid." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Klõpsake Kodu ikoonil rakendustes navigeerimiseks " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Sulge" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Tarbitud" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Keela tuurid" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Kuvatav nimi" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menüü" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nimi" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Sisseelamis tuurid" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Ava veamenüü." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Asukoht" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Jada" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Alusta" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Alusta tuuri" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Alusta tuuri" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test tuur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Testi tuuri" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Jootraha" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Tuuri nimi" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tuurid" diff --git a/i18n/fa.po b/i18n/fa.po new file mode 100644 index 0000000..cb6aa1e --- /dev/null +++ b/i18n/fa.po @@ -0,0 +1,192 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Yousef Shadmanesh , 2023 +# Hamid Darabi, 2023 +# Martin Trigaux, 2023 +# Hamed Mohammadi , 2023 +# Hanna Kheradroosta, 2023 +# mehdi samadi , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: mehdi samadi , 2023\n" +"Language-Team: Persian (https://app.transifex.com/odoo/teams/41243/fa/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fa\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "بسیار عالی! شما تمام این تور را مرور کردید." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "بر روی آیکون خانه کلیک کنید تا بین برنامه های بگردید." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "بستن" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "دیده شده توسط" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "غیر فعال کردن تورها" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "نام نمایش داده شده" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "مسیریابی HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "شناسه" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "منو" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "نام" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "مسیر" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "دنباله" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "شروع" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "شروع تور" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "تست" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "نکته" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "نام تور" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "تورها" diff --git a/i18n/fi.po b/i18n/fi.po new file mode 100644 index 0000000..310b113 --- /dev/null +++ b/i18n/fi.po @@ -0,0 +1,197 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Kari Lindgren , 2023 +# Veikko Väätäjä , 2023 +# Martin Trigaux, 2023 +# Tuomo Aura , 2023 +# Eino Mäkitalo , 2023 +# Svante Suominen , 2023 +# Jarmo Kortetjärvi , 2023 +# Ossi Mantylahti , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Ossi Mantylahti , 2023\n" +"Language-Team: Finnish (https://app.transifex.com/odoo/teams/41243/fi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fi\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Hyvin tehty! Kävit läpi kaikki tämän esittelykierroksen " +"vaiheet." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Voit siirtyä sovellusten välillä napsauttamalla Koti-kuvaketta." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Sulje" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Kuluttaa" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Poista esittelykiertueet käytöstä" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Näyttönimi" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-reititys" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Valikko" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nimi" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Esittelykierros" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Avaa debuggaus-valikko." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Polku" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Järjestys" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Aloita" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Aloita esittelykierros" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Aloita esittelykierros" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Testi" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Koe-esittely" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Koe-esittelyt" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Vinkki" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Esittelykiertueen nimi" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Esittelykiertueet" diff --git a/i18n/fr.po b/i18n/fr.po new file mode 100644 index 0000000..c68aed5 --- /dev/null +++ b/i18n/fr.po @@ -0,0 +1,192 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Jolien De Paepe, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Jolien De Paepe, 2023\n" +"Language-Team: French (https://app.transifex.com/odoo/teams/41243/fr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: fr\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Bien joué ! Vous venez de terminer toutes les étapes de cette" +" visite." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Cliquez sur l'icône d'accueil pour naviguer d'une application à " +"l'autre." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Fermer" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consommé par" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Désactiver les visites" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nom d'affichage" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Routage HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nom" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Parcours d'intégration" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Ouvrir le menu développeur." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Chemin" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Faites défiler jusqu'à la prochaine étape." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Faites défiler vers le haut jusqu'à la prochaine étape." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Séquence" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Lancer" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Démarrer la visite" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Démarrer la visite" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Tester" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Visite d'essai" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Visites d'essai" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Conseil" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nom de la visite" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Visites" diff --git a/i18n/gu.po b/i18n/gu.po new file mode 100644 index 0000000..078e009 --- /dev/null +++ b/i18n/gu.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Qaidjohar Barbhaya, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~14.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2022-09-22 05:56+0000\n" +"Last-Translator: Qaidjohar Barbhaya, 2023\n" +"Language-Team: Gujarati (https://app.transifex.com/odoo/teams/41243/gu/)\n" +"Language: gu\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Display Name" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "મેનૂ" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Name" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sequence" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/he.po b/i18n/he.po new file mode 100644 index 0000000..d54cebc --- /dev/null +++ b/i18n/he.po @@ -0,0 +1,192 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Sagi Ahiel, 2023 +# Lilach Gilliam , 2023 +# Martin Trigaux, 2023 +# Yihya Hugirat , 2023 +# ZVI BLONDER , 2023 +# ExcaliberX , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: ExcaliberX , 2023\n" +"Language-Team: Hebrew (https://app.transifex.com/odoo/teams/41243/he/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: he\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "עבודה טובה! עברת את כל השלבים של המדריך." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "לחץ על סמל הבית כדי לנווט בין יישומים." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "סגור" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "בשימוש על ידי" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "השבת סיורים" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "שם לתצוגה" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "ניתוב HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "מזהה" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "תפריט" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "שם" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "נתיב" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "רצף" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "התחל" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "התחל סיור" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "התחל סיור" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "בדוק" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "עצה" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "שם סיור" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "סיורים" diff --git a/i18n/hr.po b/i18n/hr.po new file mode 100644 index 0000000..416c357 --- /dev/null +++ b/i18n/hr.po @@ -0,0 +1,182 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Ivica Dimjašević , 2022 +# Vojislav Opačić , 2022 +# Đurđica Žarković , 2022 +# Vladimir Olujić , 2022 +# Martin Trigaux, 2022 +# Karolina Tonković , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~14.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2022-09-22 05:56+0000\n" +"Last-Translator: Karolina Tonković , 2022\n" +"Language-Team: Croatian (https://app.transifex.com/odoo/teams/41243/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Koristili" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Naziv" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP usmjeravanje" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Izbornik" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Naziv" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Putanja" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekvenca" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Savjet" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/hu.po b/i18n/hu.po new file mode 100644 index 0000000..65c4640 --- /dev/null +++ b/i18n/hu.po @@ -0,0 +1,192 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Gergő Kertész , 2023 +# Tamás Dombos, 2023 +# Martin Trigaux, 2023 +# Ákos Nagy , 2023 +# gezza , 2023 +# krnkris, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: krnkris, 2023\n" +"Language-Team: Hungarian (https://app.transifex.com/odoo/teams/41243/hu/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hu\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Bezárás" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Által felhasznált" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Megjelenített név" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP irányítás" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "Azonosító" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menü" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Név" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Útvonal" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sorszám" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Indítás" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Bejárás elindítása" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Tesztelés" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tipp" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Bejárás neve" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Bejárások" diff --git a/i18n/hy.po b/i18n/hy.po new file mode 100644 index 0000000..1b66841 --- /dev/null +++ b/i18n/hy.po @@ -0,0 +1,183 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Language-Team: Armenian (https://app.transifex.com/odoo/teams/41243/hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/id.po b/i18n/id.po new file mode 100644 index 0000000..bcfb2d9 --- /dev/null +++ b/i18n/id.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Abe Manyo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Abe Manyo, 2023\n" +"Language-Team: Indonesian (https://app.transifex.com/odoo/teams/41243/id/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: id\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Selamat! Anda telah melalui semua langkah tur ini." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Klik pada ikon Home untuk navigasi di seluruh aplikasi." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Tutup" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Dikonsumsi oleh" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Nonaktifkan Tur" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nama Tampilan" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nama" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Tur Onboarding" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Buka menu bugger." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Jalan" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Scroll ke bawah untuk mencapai langkah berikutnya." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Scroll ke atas untuk mencapai langkah berikutnya." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Urutan" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Mulai" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Mulai Tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Mulai tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Tes" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Tes tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Mengetes tur" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nama tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tur" diff --git a/i18n/is.po b/i18n/is.po new file mode 100644 index 0000000..62167bf --- /dev/null +++ b/i18n/is.po @@ -0,0 +1,183 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Language-Team: Icelandic (https://app.transifex.com/odoo/teams/41243/is/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: is\n" +"Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/it.po b/i18n/it.po new file mode 100644 index 0000000..163d2f8 --- /dev/null +++ b/i18n/it.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Marianna Ciofani, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Marianna Ciofani, 2023\n" +"Language-Team: Italian (https://app.transifex.com/odoo/teams/41243/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: it\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Bel lavoro! Hai completato tutte le fasi del tour." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Fare clic sull'icona Home per navigare tra le applicazioni." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Chiudi" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Completato da" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Disattiva tour" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nome visualizzato" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Instradamento HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menù" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nome" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Tour di Onboarding" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Apri il menu sviluppatore." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Percorso" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Scorri verso il basso per raggiungere la fase successiva." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Scorri verso l'alto per raggiungere la fase successiva." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sequenza" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Avvio" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Inizia tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Inizia Tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Prova" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Tour di prova" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Tour di prova" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Consiglio" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nome tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tour" diff --git a/i18n/ja.po b/i18n/ja.po new file mode 100644 index 0000000..0ce1ead --- /dev/null +++ b/i18n/ja.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Junko Augias, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Junko Augias, 2023\n" +"Language-Team: Japanese (https://app.transifex.com/odoo/teams/41243/ja/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ja\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "Good job! あなたはこのツアーのすべてのステップを通過しました。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "ホームアイコンをクリックしてアプリを横断してナビゲートします。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "閉じる" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "使用履歴" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "ツアーを無効化" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "表示名" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTPルーティング" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "メニュー" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "名称" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "オンボーディングツアー" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "オンボーディングメニュー" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "パス" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "スクロールダウンして次のステップに進みます。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "スクロールアップして次のステップに進みます。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "シーケンス" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "開始" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "ツアーを開始" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "ツアー開始" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "インポートテスト" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "ツアーをテスト" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "ツアーをテスト中" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "チップ" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "ツアー名" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "ツアー" diff --git a/i18n/km.po b/i18n/km.po new file mode 100644 index 0000000..87a29f6 --- /dev/null +++ b/i18n/km.po @@ -0,0 +1,176 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Sengtha Chay , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2018-09-21 13:18+0000\n" +"Last-Translator: Sengtha Chay , 2018\n" +"Language-Team: Khmer (https://www.transifex.com/odoo/teams/41243/km/)\n" +"Language: km\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "ឈ្មោះសំរាប់បង្ហាញ" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "ឈ្មោះ" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/ko.po b/i18n/ko.po new file mode 100644 index 0000000..3672764 --- /dev/null +++ b/i18n/ko.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Daye Jeong, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Daye Jeong, 2023\n" +"Language-Team: Korean (https://app.transifex.com/odoo/teams/41243/ko/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ko\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "잘하셨습니다!이번 여정의 모든 단계를 완료하였습니다." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "홈 아이콘을 클릭하여 앱을 탐색합니다." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "닫기" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "다음에 의해 소비됨" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "둘러보기 비활성화" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "표시명" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 라우팅" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "메뉴" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "이름" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "온보딩 둘러보기" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "햄버거 버튼 메뉴 열기." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "경로" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "아래로 스크롤하여 다음 단계로 이동하세요." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "위로 스크롤하여 다음 단계로 이동합니다." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "순서" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "시작" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "둘러보기 시작" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "둘러보기 시작" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "테스트" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "둘러보기 테스트" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "둘러보기 테스트 중" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "팁" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "둘러보기 이름" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "둘러보기" diff --git a/i18n/lb.po b/i18n/lb.po new file mode 100644 index 0000000..ad77acd --- /dev/null +++ b/i18n/lb.po @@ -0,0 +1,173 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~11.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2019-08-26 09:15+0000\n" +"Language-Team: Luxembourgish (https://www.transifex.com/odoo/teams/41243/lb/)\n" +"Language: lb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/lt.po b/i18n/lt.po new file mode 100644 index 0000000..224c469 --- /dev/null +++ b/i18n/lt.po @@ -0,0 +1,194 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Arminas Grigonis , 2023 +# Ramunė ViaLaurea , 2023 +# Anatolij, 2023 +# Audrius Palenskis , 2023 +# Martin Trigaux, 2023 +# Šarūnas Ažna , 2023 +# Linas Versada , 2023 +# Silvija Butko , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Silvija Butko , 2023\n" +"Language-Team: Lithuanian (https://app.transifex.com/odoo/teams/41243/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Norėdami naviguoti tarp programų, paspauskite namų piktogramą." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Uždaryti" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Sunaudojo" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Išjungti turus" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Rodomas pavadinimas" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP nukreipimas" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meniu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Vardas, Pavardė" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Kelias" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Seka" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Pradėti" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Pradėti turą" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Testas" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Arbatpinigiai" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Turo pavadinimas" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Turai" diff --git a/i18n/lv.po b/i18n/lv.po new file mode 100644 index 0000000..32eb5d6 --- /dev/null +++ b/i18n/lv.po @@ -0,0 +1,191 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Arnis Putniņš , 2023 +# Martin Trigaux, 2023 +# Anzelika Adejanova, 2023 +# Armīns Jeltajevs , 2023 +# ievaputnina , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: ievaputnina , 2023\n" +"Language-Team: Latvian (https://app.transifex.com/odoo/teams/41243/lv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: lv\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Aizvērt" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Attēlotais nosaukums" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP maršrutēšana" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Izvēlne" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nosaukums" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Ceļš" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekvence" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Sākt" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Tests" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tējasnauda" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tūres" diff --git a/i18n/mn.po b/i18n/mn.po new file mode 100644 index 0000000..30f6db2 --- /dev/null +++ b/i18n/mn.po @@ -0,0 +1,181 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Otgonbayar.A , 2022 +# Батмөнх Ганбат , 2022 +# Martin Trigaux, 2022 +# Baskhuu Lodoikhuu , 2022 +# hish, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~14.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2022-09-22 05:56+0000\n" +"Last-Translator: hish, 2022\n" +"Language-Team: Mongolian (https://app.transifex.com/odoo/teams/41243/mn/)\n" +"Language: mn\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Хангагдсан" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Дэлгэрэнгүй нэр" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Цэс" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Нэр" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Зам" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Дугаарлалт" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Эхлэх" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Аялалыг эхлэх" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Тест" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Шан харамж" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Аялалын нэр" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Аялалууд" diff --git a/i18n/nb.po b/i18n/nb.po new file mode 100644 index 0000000..9c35a7f --- /dev/null +++ b/i18n/nb.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Henning Herfjord , 2022 +# Martin Trigaux, 2022 +# Marius Stedjan , 2022 +# Jorunn D. Newth, 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~14.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2022-09-22 05:56+0000\n" +"Last-Translator: Jorunn D. Newth, 2022\n" +"Language-Team: Norwegian Bokmål (https://app.transifex.com/odoo/teams/41243/nb/)\n" +"Language: nb\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Forbrukt av" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Slå av omvisninger" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Visningsnavn" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-ruting" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meny" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Navn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Filbane" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekvens" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Start omvisning" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Start guide" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tips" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Omvisningsnavn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Omvisninger" diff --git a/i18n/nl.po b/i18n/nl.po new file mode 100644 index 0000000..d8414c4 --- /dev/null +++ b/i18n/nl.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Dutch (https://app.transifex.com/odoo/teams/41243/nl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: nl\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Goed gedaan! Je hebt alle stappen van deze rondleiding " +"doorlopen." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Klik op het startpagina icoon om doorheen apps te navigeren." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Afsluiten" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Verbruikt door" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Rondleidingen uitschakelen" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Schermnaam" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP routing" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Naam" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Onboarding tours" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Open het bugger-menu." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Pad" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Naar beneden scrollen om naar de volgende stap te gaan." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Naar boven scrollen om naar de volgende stap te gaan." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Reeks" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Rondleidingen starten" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Rondleiding starten" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test rondleiding" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Testing rondleidingen" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Naam rondleiding" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Rondleidingen" diff --git a/i18n/pl.po b/i18n/pl.po new file mode 100644 index 0000000..a36b39f --- /dev/null +++ b/i18n/pl.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Polish (https://app.transifex.com/odoo/teams/41243/pl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pl\n" +"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Dobra robota! Przeszedłeś przez wszystkie etapy tej " +"wycieczki." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Kliknij na ikonę Domu, aby nawigować pomiędzy aplikacjami." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Zamknij" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Zużyte przez" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Wyłącz wycieczki" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nazwa wyświetlana" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Wytyczanie HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nazwa" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Przewodniki wdrożeniowe" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Otwórz menu błędów." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Ścieżka" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekwencja" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Uruchom" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Rozpocznij wycieczkę" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Rozpocznij wycieczkę" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Przetestuj wycieczkę" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Przetestuj przewodnik" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Wskazówka" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nazwa wycieczki" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Samouczki" diff --git a/i18n/pt.po b/i18n/pt.po new file mode 100644 index 0000000..8ef08b6 --- /dev/null +++ b/i18n/pt.po @@ -0,0 +1,187 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Portuguese (https://app.transifex.com/odoo/teams/41243/pt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Fechar" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumido por" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nome" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Rotas HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nome" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Caminho" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sequência" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Início" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Iniciar Guia" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Iniciar Visita Guiada" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Teste" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Gorjeta" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nome do guia " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tours" diff --git a/i18n/pt_BR.po b/i18n/pt_BR.po new file mode 100644 index 0000000..d225231 --- /dev/null +++ b/i18n/pt_BR.po @@ -0,0 +1,191 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Maitê Dietze, 2023 +# Layna Nascimento, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Layna Nascimento, 2023\n" +"Language-Team: Portuguese (Brazil) (https://app.transifex.com/odoo/teams/41243/pt_BR/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: pt_BR\n" +"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Muito bem! Você passou por todas as etapas desta " +"tour." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Clique no ícone Início para navegar pelos aplicativos." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Encerrar" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumido por" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Desabilitar tours" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nome exibido" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Roteamento HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nome" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Tours de integração" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Abra o menu do bugger." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Caminho" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Role para baixo para ir à próxima etapa." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Role para cima para ir à próxima etapa." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sequência" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Iniciar" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Iniciar tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Iniciar tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Teste" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Tour de teste" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Tours de teste" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Dica" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nome do tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Tours" diff --git a/i18n/ro.po b/i18n/ro.po new file mode 100644 index 0000000..985beb6 --- /dev/null +++ b/i18n/ro.po @@ -0,0 +1,180 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# sharkutz , 2022 +# Martin Trigaux, 2022 +# Dorin Hongu , 2022 +# Hongu Cosmin , 2022 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server saas~14.5\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2022-09-22 05:56+0000\n" +"Last-Translator: Hongu Cosmin , 2022\n" +"Language-Team: Romanian (https://app.transifex.com/odoo/teams/41243/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "Bună treabă!Ați parcurs toate etapele acestui tur." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Nume afișat" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Rutare HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meniu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Nume" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Cale" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Secvență" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Începte tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Tur de test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Sfat" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Nume tur" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Ture" diff --git a/i18n/ru.po b/i18n/ru.po new file mode 100644 index 0000000..bc6e4ca --- /dev/null +++ b/i18n/ru.po @@ -0,0 +1,194 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Vasiliy Korobatov , 2023 +# Martin Trigaux, 2023 +# Sergey Vilizhanin, 2023 +# Alena Vlasova, 2023 +# Collex100, 2023 +# Wil Odoo, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2024\n" +"Language-Team: Russian (https://app.transifex.com/odoo/teams/41243/ru/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Отличная работа! Вы прошли все этапы этого тура." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Нажмите на значок \"Домой\", чтобы перемещаться между приложениями." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Закрыть" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Потребляется" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Отключить туры" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Отображаемое имя" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Маршрутизация HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Меню" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Имя" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Выездные туры" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Откройте меню бугер." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Путь" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Прокрутите вниз, чтобы перейти к следующему шагу." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Прокрутите вверх, чтобы перейти к следующему шагу." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Последовательность" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Начало" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Начать презентацию" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Начало экскурсии" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Тест" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Тестовый тур" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Тестовые туры" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Подсказки" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Название тура" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Туры" diff --git a/i18n/sk.po b/i18n/sk.po new file mode 100644 index 0000000..70cc06c --- /dev/null +++ b/i18n/sk.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Slovak (https://app.transifex.com/odoo/teams/41243/sk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Dobrá práca! Prešli ste všetkými krokmi tejto " +"prehliadky." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Klikni na domovskú ikonu pre navigáciu medzi aplikáciami." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvoriť" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Spotrebované " + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Vypnúť prehliadky" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Zobrazovaný názov" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP smerovanie" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Meno" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Cesta" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Postupnosť" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Štart" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Začať prehliadku" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Začať prehliadku" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Názov prehliadky" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Prehliadky" diff --git a/i18n/sl.po b/i18n/sl.po new file mode 100644 index 0000000..9337ad2 --- /dev/null +++ b/i18n/sl.po @@ -0,0 +1,193 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Matjaz Mozetic , 2023 +# matjaz k , 2023 +# Tadej Lupšina , 2023 +# Martin Trigaux, 2023 +# Jasmina Macur , 2023 +# Grega Vavtar , 2024 +# Katja Deržič, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Katja Deržič, 2024\n" +"Language-Team: Slovenian (https://app.transifex.com/odoo/teams/41243/sl/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "Dobro opravljenoŠli ste skozi vse korake" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Zaključi" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Porabil" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Onemogoči oglede" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Prikazani naziv" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP usmerjanje" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meni" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Naziv" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Pot" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Za naslednji korak se pomaknite navzdol." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Za naslednji korak se pomaknite navzgor." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Zaporedje" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Prični" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Začni ogled" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Ime ogleda" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Ogledi" diff --git a/i18n/sr.po b/i18n/sr.po new file mode 100644 index 0000000..e209b39 --- /dev/null +++ b/i18n/sr.po @@ -0,0 +1,191 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Martin Trigaux, 2023 +# Dragan Vukosavljevic , 2023 +# Milan Bojovic , 2023 +# コフスタジオ, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: コフスタジオ, 2024\n" +"Language-Team: Serbian (https://app.transifex.com/odoo/teams/41243/sr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sr\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Dobar posao! Prošli ste kroz sve korake ove ture." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Click on the Home icon to navigate across apps." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Zatvori" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumed by" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Disable Tours" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP rutiranje" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meni" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Naziv" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Onboarding tours" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Open bugger menu." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Putanja" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Niz" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Pokreni" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Start Tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Start tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Testing tours" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Tour name" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Ture" diff --git a/i18n/sr@latin.po b/i18n/sr@latin.po new file mode 100644 index 0000000..e914bfb --- /dev/null +++ b/i18n/sr@latin.po @@ -0,0 +1,177 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Djordje Marjanovic , 2017 +# Martin Trigaux , 2017 +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 10.saas~18\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-05-16 13:50+0000\n" +"PO-Revision-Date: 2017-09-20 09:54+0000\n" +"Last-Translator: Martin Trigaux , 2017\n" +"Language-Team: Serbian (Latin) (https://www.transifex.com/odoo/teams/41243/sr%40latin/)\n" +"Language: sr@latin\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Naziv za prikaz" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meni" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Naziv" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/sv.po b/i18n/sv.po new file mode 100644 index 0000000..f5ac877 --- /dev/null +++ b/i18n/sv.po @@ -0,0 +1,194 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Jakob Krabbe , 2023 +# Chrille Hedberg , 2023 +# Kristoffer Grundström , 2023 +# Martin Trigaux, 2023 +# Anders Wallenquist , 2023 +# Kim Asplund , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Kim Asplund , 2023\n" +"Language-Team: Swedish (https://app.transifex.com/odoo/teams/41243/sv/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: sv\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Bra jobbat! Du gick igenom alla steg på den här " +"genomgången." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Klicka på Hem ikonen för att navigera mellan appar." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Stäng" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Förbrukad av" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Avbryt rundturen" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Visningsnamn" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP-rutt" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Meny" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Namn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Onboarding genomgångar" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Öppna bugger-menyn." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Sökväg" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sekvens" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Start" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Starta rundturen" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Starta genomgången" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Testa" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test genomgång" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Test genomgångar" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Dricks" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Genomgångsnamn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Genomgångar" diff --git a/i18n/th.po b/i18n/th.po new file mode 100644 index 0000000..bc67159 --- /dev/null +++ b/i18n/th.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Rasareeyar Lappiam, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Rasareeyar Lappiam, 2024\n" +"Language-Team: Thai (https://app.transifex.com/odoo/teams/41243/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "ยอดเยี่ยม! คุณผ่านทุกขั้นตอนของทัวร์นี้แล้ว" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "คลิกที่ ไอคอนโฮม เพื่อไปยังแอปต่างๆ" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "ปิด" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "บริโภคโดย" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "ปิดการใช้งานทัวร์" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "แสดงชื่อ" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "การกำหนด HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ไอดี" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "เมนู" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "ชื่อ" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "ทัวร์การเริ่มงาน" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "เปิดเมนูบักเกอร์" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "เส้นทาง" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "เลื่อนลงเพื่อไปยังขั้นตอนถัดไป" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "เลื่อนขึ้นเพื่อไปยังขั้นตอนถัดไป" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "ลำดับ" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "เริ่ม" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "เริ่มทัวร์" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "เริ่มทัวร์" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "ทดสอบ" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "ทดสอบทัวร์" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "ทดสอบทัวร์" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "ทิป" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "ชื่อทัวร์" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "ทัวร์" diff --git a/i18n/tr.po b/i18n/tr.po new file mode 100644 index 0000000..a920563 --- /dev/null +++ b/i18n/tr.po @@ -0,0 +1,196 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# abc Def , 2023 +# Umur Akın , 2023 +# Martin Trigaux, 2023 +# Murat Kaplan , 2023 +# Ayhan KIZILTAN , 2023 +# Ertuğrul Güreş , 2023 +# Levent Karakaş , 2023 +# Ediz Duman , 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Ediz Duman , 2023\n" +"Language-Team: Turkish (https://app.transifex.com/odoo/teams/41243/tr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: tr\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Tebrikler! Bu turun tüm adımlarını tamamladınız." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Ana sayfa simgesinin Üzerine tıklayın uygulamalar arasında gezinin." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Kapat" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Tarafından Tamamlandı" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Turları Kapat" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Görünüm Adı" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP Yönlendirme" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menü" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Adı" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Katılım turları" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Hata oluşturucu menüsünü açın." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Yol" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Sıralama" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Başla" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Turu Başlat" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Başlangıç turu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Test" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test turu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Test turları" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "İpucu" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Tur Adı" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Turlar" diff --git a/i18n/uk.po b/i18n/uk.po new file mode 100644 index 0000000..f791d88 --- /dev/null +++ b/i18n/uk.po @@ -0,0 +1,189 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Alina Lisnenko , 2023 +# Wil Odoo, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Wil Odoo, 2023\n" +"Language-Team: Ukrainian (https://app.transifex.com/odoo/teams/41243/uk/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: uk\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "Молодці! Ви пройшли усі кроки цього туру." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" +"Натисніть на іконку Домашньої сторінки для навігації між додатками." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Закрити" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Завершив" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Вимкнути тури" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Назва для відображення" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Маршрутизація HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Меню" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Ім'я" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Ознайомчий тур" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Відкрийте бургер-меню." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Шлях" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Послідовність" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Початок" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Почати тур" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Розпочати тур" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Тест" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Тестовий тур" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Тестові тури" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Підказка" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Назва туру" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Тури" diff --git a/i18n/vi.po b/i18n/vi.po new file mode 100644 index 0000000..9e74c41 --- /dev/null +++ b/i18n/vi.po @@ -0,0 +1,190 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Thi Huong Nguyen, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Thi Huong Nguyen, 2024\n" +"Language-Team: Vietnamese (https://app.transifex.com/odoo/teams/41243/vi/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: vi\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" +"Làm tốt lắm! Bạn đã thực hiện tất cả các bước của chuyến " +"hướng dẫn này." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "Click on the Home icon to navigate across apps." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "Đóng" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "Consumed by" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "Disable Tours" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "Tên hiển thị" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "Định tuyến HTTP" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "Menu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "Tên" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "Tour hướng dẫn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "Open bugger menu." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "Đường dẫn" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "Cuộn xuống để đến bước tiếp theo." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "Cuộn lên để đến bước tiếp theo." + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "Trình tự" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "Bắt đầu" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "Start Tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "Start tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "Kiểm thử" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "Test tour" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "Tour kiểm thử" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "Tiền tip" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "Tour name" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "Du lịch" diff --git a/i18n/web_tour.pot b/i18n/web_tour.pot new file mode 100644 index 0000000..2d41fb2 --- /dev/null +++ b/i18n/web_tour.pot @@ -0,0 +1,183 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 21:56+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "" diff --git a/i18n/zh_CN.po b/i18n/zh_CN.po new file mode 100644 index 0000000..6e66ddf --- /dev/null +++ b/i18n/zh_CN.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: 山西清水欧度(QQ:54773801) <54773801@qq.com>, 2023\n" +"Language-Team: Chinese (China) (https://app.transifex.com/odoo/teams/41243/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "干得好!您完成了所有步骤。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "点击 首页 导航可在功能应用间跳转。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "关闭 " + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "消耗于" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "禁用游览" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "显示名称" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 路由" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "ID" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "菜单" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "名称" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "引导旅游" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "打开调试菜单。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "路径" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "向下滚动,进入下一步骤。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "向上滚动,进入下一步骤。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "序列" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "开始" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "开始游览" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "开始游览" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "测试" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "测试之旅" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "测试之旅" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "提示" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "游览名称" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "游览" diff --git a/i18n/zh_TW.po b/i18n/zh_TW.po new file mode 100644 index 0000000..dd557ae --- /dev/null +++ b/i18n/zh_TW.po @@ -0,0 +1,188 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * web_tour +# +# Translators: +# Wil Odoo, 2023 +# Tony Ng, 2024 +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 17.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-10-26 21:56+0000\n" +"PO-Revision-Date: 2023-10-26 23:09+0000\n" +"Last-Translator: Tony Ng, 2024\n" +"Language-Team: Chinese (Taiwan) (https://app.transifex.com/odoo/teams/41243/zh_TW/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Language: zh_TW\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_service.js:0 +#, python-format +msgid "" +"Good job! You went through all steps of this tour." +msgstr "做得好!您已完成本次導覽的所有步驟。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Click on the Home icon to navigate across apps." +msgstr "按一下 首頁圖示 可跨應用程式導航。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Close" +msgstr "關閉" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__user_id +msgid "Consumed by" +msgstr "消耗由" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Disable Tours" +msgstr "停用導覽" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__display_name +msgid "Display Name" +msgstr "顯示名稱" + +#. module: web_tour +#: model:ir.model,name:web_tour.model_ir_http +msgid "HTTP Routing" +msgstr "HTTP 路由" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__id +msgid "ID" +msgstr "識別號" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_list +msgid "Menu" +msgstr "功能表" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Name" +msgstr "名稱" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Onboarding tours" +msgstr "入職導覽" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_utils.js:0 +#, python-format +msgid "Open bugger menu." +msgstr "打開 bugger 選單" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Path" +msgstr "路徑" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll down to reach the next step." +msgstr "向下捲動,以進入下一步驟。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/tour_service/tour_pointer_state.js:0 +#, python-format +msgid "Scroll up to reach the next step." +msgstr "向上捲動,以進入下一步驟。" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Sequence" +msgstr "序列號" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start" +msgstr "開始" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/debug_manager.js:0 +#, python-format +msgid "Start Tour" +msgstr "開始導覽" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Start tour" +msgstr "開始導覽" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test" +msgstr "測試" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Test tour" +msgstr "測試導覽" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.xml:0 +#, python-format +msgid "Testing tours" +msgstr "測試導覽" + +#. module: web_tour +#: model_terms:ir.ui.view,arch_db:web_tour.edit_tour_search +msgid "Tip" +msgstr "小費" + +#. module: web_tour +#: model:ir.model.fields,field_description:web_tour.field_web_tour_tour__name +msgid "Tour name" +msgstr "導覽名稱" + +#. module: web_tour +#. odoo-javascript +#: code:addons/web_tour/static/src/debug/tour_dialog_component.js:0 +#: model:ir.actions.act_window,name:web_tour.edit_tour_action +#: model:ir.model,name:web_tour.model_web_tour_tour +#: model:ir.ui.menu,name:web_tour.menu_tour_action +#, python-format +msgid "Tours" +msgstr "遊覽" diff --git a/models/__init__.py b/models/__init__.py new file mode 100644 index 0000000..a9f4d6f --- /dev/null +++ b/models/__init__.py @@ -0,0 +1,5 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import ir_http +from . import tour diff --git a/models/__pycache__/__init__.cpython-311.pyc b/models/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec44871d2316b3b6ebd5faa7173493c58581a8cf GIT binary patch literal 264 zcmZ3^%ge<81Z;bC(t3gPV-N=hn4pZ$azMs(h7^Vr#vF!R#wbQc5St0eW{P40vYCS! zG+ACU0u^a8-eS)ziq9x1DF8BAO7csK{4|+wF%&TaC5u>q#7c(GK$78?gMLPSZmNDt zYEoumo_>Bxem;i)*GP=PabO9SGVh8F108kS_KL7v# literal 0 HcmV?d00001 diff --git a/models/__pycache__/ir_http.cpython-311.pyc b/models/__pycache__/ir_http.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3665843cce987bdbf44c0dc8b21bdf456ce8bd7d GIT binary patch literal 1270 zcma)6&2JJx6rW*%(iT!N_QQjgCBaH#z+S9LzqDzz7fEY9ad5IQLs?zeIB%<>OCfr2VBfs=esAV|?tTn~h7c_O*BiOG z2chp$aF?&coZbfJ08vD-feJW{G4i1Mhd0x3J7 z3!>42UfjL_HH4Ow4A$9Xbtx;DXL#Y!cIXAm5X&s_ge3N$D+(@qW(TE~P+e#lgT?)} zPn5P8w}XNSp_@gb7jvequ;O#uD@xRqfX1_Vk~K?3%f7hDEMSYGRAAKcBH~`KWJb>R zb0$g#*vL>wJ3!GnH%Lg<(1ajF$mAlC$llpfGH(`GlCq4h6_X}4O^1+~*~HDnOj4s1 z{3PA*lkFi)>YT{=No>91A-HKfEXOL*8@+rl#A_hG_t3ZS*t_xfmloKUWP-He<72)LLu~#Kmeb+8h}zhfX011Vs)I zQq&5J5POJpDg%6wkY^>$=pX?oeV%dMa`Li6or-0dVGt6>d{m|-r|k|O1Ip!4Ib=Wr z3qT-W_tzYm*jsIR{l2jl`aib81VkC2SOd~hFvhI_!V?uV-urL)2QftTH!0t$4^RG-z^{Lxj>kU~I4v{) literal 0 HcmV?d00001 diff --git a/models/__pycache__/tour.cpython-311.pyc b/models/__pycache__/tour.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ea568ba3be74b8fa7f857cc2b42dafb68f1addcd GIT binary patch literal 2070 zcmZ`)%}*Og6rcU@;!lhM3Q>~Mt<)s43U+9vq^J}jg+e0&kxDML8m*R{@mK9#GP6#K z1(FXOXk{s_REZpVKsk_9K3xNI`Q#>ZvzJ^u(!ecJ1Y>jCbF>_vXEw_wk$Y zt3)D-U}%30=WeJ7{Vjy<2z8jlNnkb*Mp!DNijLHYDh?)PW_4`6sr#M7mmqE+g0d1uSs6=N z1LaI0Yl&xM(QtuF3&KM}$);-&G3&NjA&*ir*O*I-cAkeRc~UJ> zf@={NT5?iNfps-GBcfiTkXc;?u*Tz!$~rscwi zbkkn0IF#r)hkA~>sH$E|E}D#_^VF#>8A3A;ZBRu&c#jZ`B2H;sA@)?gG7++_)5|a&MaM-5mQz`psD0u!Cr@0X z3t8{rv-Eh`vCJ}?0H$j^1kUU#kUDB6=l$o!=+DxxS|HLZuuKzT7wJntn8t`ntpe>8 zY7sjGHUJY7#q`7Bm(K5A8@wQ_Yr^+4AOIf?^*xke=S}rh>}BkAai@O=?-q8;&5_yW z@Pn2OJG8U~=YS|-594dY4GEQ@mhQphs_B__7{Xd0LjKBBR{=LA$i~K*0Q}ZAI literal 0 HcmV?d00001 diff --git a/models/ir_http.py b/models/ir_http.py new file mode 100644 index 0000000..1d37ea1 --- /dev/null +++ b/models/ir_http.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import models + + +class Http(models.AbstractModel): + _inherit = 'ir.http' + + def session_info(self): + result = super().session_info() + if result['is_admin']: + demo_modules_count = self.env['ir.module.module'].sudo().search_count([('demo', '=', True)]) + result['web_tours'] = self.env['web_tour.tour'].get_consumed_tours() + result['tour_disable'] = demo_modules_count > 0 + return result diff --git a/models/tour.py b/models/tour.py new file mode 100644 index 0000000..339506d --- /dev/null +++ b/models/tour.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import api, fields, models + + +class Tour(models.Model): + + _name = "web_tour.tour" + _description = "Tours" + _log_access = False + + name = fields.Char(string="Tour name", required=True) + user_id = fields.Many2one('res.users', string='Consumed by') + + @api.model + def consume(self, tour_names): + """ Sets given tours as consumed, meaning that + these tours won't be active anymore for that user """ + if not self.env.user.has_group('base.group_user'): + # Only internal users can use this method. + # TODO master: update ir.model.access records instead of using sudo() + return + for name in tour_names: + self.sudo().create({'name': name, 'user_id': self.env.uid}) + + @api.model + def get_consumed_tours(self): + """ Returns the list of consumed tours for the current user """ + return [t.name for t in self.search([('user_id', '=', self.env.uid)])] diff --git a/security/ir.model.access.csv b/security/ir.model.access.csv new file mode 100644 index 0000000..4c4c1de --- /dev/null +++ b/security/ir.model.access.csv @@ -0,0 +1,3 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_web_tour_tour_admin,access_web_tour_tour_admin,model_web_tour_tour,base.group_system,1,0,1,0 +access_web_tour_tour,access_web_tour_tour,model_web_tour_tour,base.group_user,1,0,0,0 diff --git a/security/ir.rule.csv b/security/ir.rule.csv new file mode 100644 index 0000000..6afd916 --- /dev/null +++ b/security/ir.rule.csv @@ -0,0 +1,2 @@ +"id","model_id/id","name","active","perm_create","perm_unlink","perm_read","perm_write","domain_force" +"own_tours","model_web_tour_tour","own tours","True","True","True","True","True","[('user_id','=', user.id)]" diff --git a/static/src/debug/debug_manager.js b/static/src/debug/debug_manager.js new file mode 100644 index 0000000..f4c02fa --- /dev/null +++ b/static/src/debug/debug_manager.js @@ -0,0 +1,49 @@ +/** @odoo-module **/ + +import { _t } from "@web/core/l10n/translation"; +import { browser } from "@web/core/browser/browser"; +import { registry } from "@web/core/registry"; +import ToursDialog from "@web_tour/debug/tour_dialog_component"; +import { tourState } from "../tour_service/tour_state"; + +export function disableTours({ env }) { + if (!env.services.user.isSystem) { + return null; + } + const activeTourNames = tourState.getActiveTourNames(); + if (activeTourNames.length === 0) { + return null; + } + return { + type: "item", + description: _t("Disable Tours"), + callback: async () => { + await env.services.orm.call("web_tour.tour", "consume", [activeTourNames]); + for (const tourName of activeTourNames) { + tourState.clear(tourName); + } + browser.location.reload(); + }, + sequence: 50, + }; +} + +export function startTour({ env }) { + if (!env.services.user.isSystem) { + return null; + } + return { + type: "item", + description: _t("Start Tour"), + callback: async () => { + env.services.dialog.add(ToursDialog); + }, + sequence: 60, + }; +} + +registry + .category("debug") + .category("default") + .add("web_tour.startTour", startTour) + .add("web_tour.disableTours", disableTours); diff --git a/static/src/debug/tour_dialog_component.js b/static/src/debug/tour_dialog_component.js new file mode 100644 index 0000000..3751417 --- /dev/null +++ b/static/src/debug/tour_dialog_component.js @@ -0,0 +1,43 @@ +/** @odoo-module **/ + +import { useService } from "@web/core/utils/hooks"; +import { Dialog } from "@web/core/dialog/dialog"; +import { _t } from "@web/core/l10n/translation"; + +import { Component } from "@odoo/owl"; + +export default class ToursDialog extends Component { + setup() { + this.title = _t("Tours"); + this.tourService = useService("tour_service"); + this.onboardingTours = this.tourService.getSortedTours().filter(tour => !tour.test); + this.testingTours = this.tourService.getSortedTours().filter(tour => tour.test); + } + + //-------------------------------------------------------------------------- + // Handlers + //-------------------------------------------------------------------------- + + /** + * Resets the given tour to its initial step, in onboarding mode. + * + * @private + * @param {MouseEvent} ev + */ + _onStartTour(ev) { + this.tourService.startTour(ev.target.dataset.name, { mode: 'manual' }); + this.props.close(); + } + /** + * Starts the given tour in test mode. + * + * @private + * @param {MouseEvent} ev + */ + _onTestTour(ev) { + this.tourService.startTour(ev.target.dataset.name, { mode: 'auto', stepDelay: 500, showPointerDuration: 250 }); + this.props.close(); + } +} +ToursDialog.template = "web_tour.ToursDialog"; +ToursDialog.components = { Dialog }; diff --git a/static/src/debug/tour_dialog_component.xml b/static/src/debug/tour_dialog_component.xml new file mode 100644 index 0000000..c01d6ba --- /dev/null +++ b/static/src/debug/tour_dialog_component.xml @@ -0,0 +1,62 @@ + + + + + + + Onboarding tours + + + + Testing tours + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + +
+ +
SequenceNamePathStartTest
+ +
+
+
+ +
diff --git a/static/src/tour_pointer/tour_pointer.js b/static/src/tour_pointer/tour_pointer.js new file mode 100644 index 0000000..e671331 --- /dev/null +++ b/static/src/tour_pointer/tour_pointer.js @@ -0,0 +1,151 @@ +/** @odoo-module **/ + +import { Component, useEffect, useRef } from "@odoo/owl"; +import { usePosition } from "@web/core/position_hook"; + +/** + * @typedef {import("../tour_service/tour_pointer_state").TourPointerState} TourPointerState + * + * @typedef TourPointerProps + * @property {TourPointerState} pointerState + * @property {boolean} bounce + */ + +/** @extends {Component} */ +export class TourPointer extends Component { + static props = { + pointerState: { + type: Object, + shape: { + anchor: { type: HTMLElement, optional: true }, + content: { type: String, optional: true }, + isOpen: { type: Boolean, optional: true }, + isVisible: { type: Boolean, optional: true }, + onClick: { type: [Function, { value: null }], optional: true }, + onMouseEnter: { type: [Function, { value: null }], optional: true }, + onMouseLeave: { type: [Function, { value: null }], optional: true }, + position: { + type: [ + { value: "left" }, + { value: "right" }, + { value: "top" }, + { value: "bottom" }, + ], + optional: true, + }, + rev: { type: Number, optional: true }, + }, + }, + bounce: { type: Boolean, optional: true }, + }; + + static defaultProps = { + bounce: true, + }; + + static template = "web_tour.TourPointer"; + static width = 28; // in pixels + static height = 28; // in pixels + + setup() { + const positionOptions = { + margin: 6, + onPositioned: (pointer, position) => { + const popperRect = pointer.getBoundingClientRect(); + const { top, left, direction } = position; + if (direction === "top") { + // position from the bottom instead of the top as it is needed + // to ensure the expand animation is properly done + pointer.style.bottom = `${window.innerHeight - top - popperRect.height}px`; + pointer.style.removeProperty("top"); + } else if (direction === "left") { + // position from the right instead of the left as it is needed + // to ensure the expand animation is properly done + pointer.style.right = `${window.innerWidth - left - popperRect.width}px`; + pointer.style.removeProperty("left"); + } + }, + }; + Object.defineProperty(positionOptions, "position", { get: () => this.position, enumerable: true }); + const position = usePosition("pointer", () => this.props.pointerState.anchor, positionOptions); + const rootRef = useRef("pointer"); + /** @type {DOMREct | null} */ + let dimensions = null; + let lastMeasuredContent = null; + let lastOpenState = this.isOpen; + let lastAnchor; + let [anchorX, anchorY] = [0, 0]; + useEffect(() => { + const { el: pointer } = rootRef; + if (pointer) { + const hasContentChanged = lastMeasuredContent !== this.content; + const hasOpenStateChanged = lastOpenState !== this.isOpen; + lastOpenState = this.isOpen; + + // Content changed: we must re-measure the dimensions of the text. + if (hasContentChanged) { + lastMeasuredContent = this.content; + pointer.style.removeProperty("width"); + pointer.style.removeProperty("height"); + dimensions = pointer.getBoundingClientRect(); + } + + // If the content or the "is open" state changed: we must apply + // new width and height properties + if (hasContentChanged || hasOpenStateChanged) { + const [width, height] = this.isOpen + ? [dimensions.width, dimensions.height] + : [this.constructor.width, this.constructor.height]; + if (this.isOpen) { + pointer.style.removeProperty("transition"); + } else { + // No transition if switching from open to closed + pointer.style.setProperty("transition", "none"); + } + pointer.style.setProperty("width", `${width}px`); + pointer.style.setProperty("height", `${height}px`); + } + + if (!this.isOpen) { + const { anchor } = this.props.pointerState; + if (anchor === lastAnchor) { + const { x, y, width } = anchor.getBoundingClientRect(); + const [lastAnchorX, lastAnchorY] = [anchorX, anchorY]; + [anchorX, anchorY] = [x, y]; + // Let's just say that the anchor is static if it moved less than 1px. + const delta = Math.sqrt( + Math.pow(x - lastAnchorX, 2) + Math.pow(y - lastAnchorY, 2) + ); + if (delta < 1) { + position.lock(); + return; + } + const wouldOverflow = window.innerWidth - x - width / 2 < dimensions?.width; + pointer.classList.toggle("o_expand_left", wouldOverflow); + } + lastAnchor = anchor; + pointer.style.bottom = ""; + pointer.style.right = ""; + position.unlock(); + } + } else { + lastMeasuredContent = null; + lastOpenState = false; + lastAnchor = null; + dimensions = null; + } + }); + } + + get content() { + return this.props.pointerState.content || ""; + } + + get isOpen() { + return this.props.pointerState.isOpen; + } + + get position() { + return this.props.pointerState.position || "top"; + } +} diff --git a/static/src/tour_pointer/tour_pointer.scss b/static/src/tour_pointer/tour_pointer.scss new file mode 100644 index 0000000..3dc7ce3 --- /dev/null +++ b/static/src/tour_pointer/tour_pointer.scss @@ -0,0 +1,232 @@ +$o-tour-pointer-width: 28px; +$o-tour-pointer-height: 38px; +$o-tour-pointer-border-width: 3px; +$o-tour-pointer-arrow-size: 12px; + +$o-tour-pointer-duration-in: 200ms; +$o-tour-pointer-size-duration-in: floor($o-tour-pointer-duration-in * 3 / 4); +$o-tour-pointer-size-delay-in: $o-tour-pointer-duration-in - $o-tour-pointer-size-duration-in; + +@keyframes o-tour-pointer-bounce-horizontal { + from { + transform: translateX(calc(var(--TourPointer__bounce-offset) * -1)); + } + to { + transform: translateX(var(--TourPointer__bounce-offset)); + } +} + +@keyframes o-tour-pointer-bounce-vertical { + from { + transform: translateY(calc(var(--TourPointer__bounce-offset) * -1)); + } + to { + transform: translateY(var(--TourPointer__bounce-offset)); + } +} + +@keyframes o-tour-pointer-fade-in { + from { + opacity: 0; + } +} + +@keyframes o-tour-pointer-info-expand { + from { + width: 0; + height: 0; + } +} + +.o_tour_pointer { + --TourPointer__anchor-space: 0; + --TourPointer__bounce-offset: 3px; + --TourPointer__offset: 8px; + --TourPointer__scale: 1.12; + --TourPointer__color: #{$o-enterprise-color}; + --TourPointer__color-accent: #{lighten($o-enterprise-color, 7%)}; + --TourPointer__border-width: 1px; + --TourPointer__border-color-rgb: 255, 255, 255; + --TourPointer__border-color: rgba(var(--TourPointer__border-color-rgb), 1); + --TourPointer__arrow-size: 1rem; + --TourPointer__animation-duration: 500ms; + --TourPointer__expand-duration: 200ms; + --TourPointer__text-color: black; + --TourPointer__reveal-animation: o-tour-pointer-fade-in 400ms ease; + + --TourPointer__translate-x: 0; + --TourPointer__translate-y: 0; + + z-index: $zindex-tooltip; + max-width: 270px; + border: var(--TourPointer__border-width) solid transparent; + transform: translate(var(--TourPointer__translate-x), var(--TourPointer__translate-y)); + transition: width var(--TourPointer__expand-duration), + height var(--TourPointer__expand-duration); + + &.o_bouncing { + &.o_left, + &.o_right { + animation: o-tour-pointer-bounce-horizontal var(--TourPointer__animation-duration) + ease-in infinite alternate, + var(--TourPointer__reveal-animation); + } + + &.o_top, + &.o_bottom { + animation: o-tour-pointer-bounce-vertical var(--TourPointer__animation-duration) ease-in + infinite alternate, + var(--TourPointer__reveal-animation); + } + } + + .o_tour_pointer_tip { + width: var(--TourPointer__width); + height: var(--TourPointer__height); + border: var(--TourPointer__border-width) solid white; + border-radius: 0 50% 50% 50%; + background-image: radial-gradient( + var(--TourPointer__color-accent), + var(--TourPointer__color) + ); + box-shadow: 0 0 40px 2px rgba(var(--TourPointer__border-color-rgb), 0.5); + } + + .o_tour_pointer_content { + background-color: $light; + color: transparent; + transition: color 0s ease var(--TourPointer__expand-duration); + + // Force style so that it does not depend on where the tooltip is attached + line-height: $line-height-base; + @include font-size($font-size-base); + font-family: $font-family-sans-serif; + font-weight: normal; + + .o_skip_tour { + display: inline-block; + margin-top: 4px; + color: gray; + cursor: pointer; + + &:hover { + color: darken(gray, 20%); + } + } + + p:last-child { + margin-bottom: 0; + } + } + + &.o_left .o_tour_pointer_tip { + transform: rotate(90deg) translateY(var(--TourPointer__offset)) + scaleY(var(--TourPointer__scale)) rotate(45deg); + } + + &.o_right .o_tour_pointer_tip { + transform: rotate(270deg) translateY(var(--TourPointer__offset)) + scaleY(var(--TourPointer__scale)) rotate(45deg); + } + + &.o_top .o_tour_pointer_tip { + transform: rotate(180deg) translateY(var(--TourPointer__offset)) + scaleY(var(--TourPointer__scale)) rotate(45deg); + } + + &.o_bottom .o_tour_pointer_tip { + transform: rotate(0deg) translateY(var(--TourPointer__offset)) + scaleY(var(--TourPointer__scale)) rotate(45deg); + } + + &.o_open { + border-color: #{$o-gray-400}; + background-color: #{$o-gray-300}; + animation: var(--TourPointer__reveal-animation); + + .o_tour_pointer_tip { + width: var(--TourPointer__arrow-size); + height: var(--TourPointer__arrow-size); + border-color: #{$o-gray-400}; + border-radius: 0; + background: $light; + box-shadow: none; + } + + .o_tour_pointer_content { + color: $o-black; + } + + &.o_left { + --TourPointer__translate-x: calc(var(--TourPointer__arrow-size) / -2); + + .o_tour_pointer_tip { + transform: translateX(-50%) rotate(45deg); + /*rtl:begin:ignore*/ + right: calc(var(--TourPointer__arrow-size) * -1); + top: calc(var(--TourPointer__arrow-size) / 2); + /*rtl:end:ignore*/ + } + } + + &.o_right { + --TourPointer__translate-x: calc(var(--TourPointer__arrow-size) / 2); + + .o_tour_pointer_tip { + transform: translateX(50%) rotate(45deg); + /*rtl:begin:ignore*/ + left: calc(var(--TourPointer__arrow-size) * -1); + top: calc(var(--TourPointer__arrow-size) / 2); + /*rtl:end:ignore*/ + } + } + + &.o_top { + --TourPointer__translate-y: calc(var(--TourPointer__arrow-size) / -2); + + .o_tour_pointer_tip { + transform: translateY(-50%) rotate(45deg); + /*rtl:begin:ignore*/ + bottom: calc(var(--TourPointer__arrow-size) * -1); + left: calc(var(--TourPointer__arrow-size) / 2); + /*rtl:end:ignore*/ + } + } + + &.o_bottom { + --TourPointer__translate-y: calc(var(--TourPointer__arrow-size) / 2); + + .o_tour_pointer_tip { + transform: translateY(50%) rotate(45deg); + /*rtl:begin:ignore*/ + top: calc(var(--TourPointer__arrow-size) * -1); + left: calc(var(--TourPointer__arrow-size) / 2); + /*rtl:end:ignore*/ + } + } + + // Exception for when the info bubble would overflow to the right: + // we offset the content to the left + &.o_expand_left { + &.o_top, + &.o_bottom { + --TourPointer__translate-x: calc( + var(--TourPointer__width) + var(--TourPointer__border-width) - 100% + ); + + .o_tour_pointer_tip { + /*rtl:begin:ignore*/ + left: initial; + right: calc(var(--TourPointer__arrow-size) / 2); + /*rtl:end:ignore*/ + } + } + } + } +} + +@media print { + .o_tour_pointer { + display: none !important; + } +} diff --git a/static/src/tour_pointer/tour_pointer.xml b/static/src/tour_pointer/tour_pointer.xml new file mode 100644 index 0000000..07c3c33 --- /dev/null +++ b/static/src/tour_pointer/tour_pointer.xml @@ -0,0 +1,30 @@ + + + +
+
+
+ +
+
+ + diff --git a/static/src/tour_service/tour_compilers.js b/static/src/tour_service/tour_compilers.js new file mode 100644 index 0000000..327f7d9 --- /dev/null +++ b/static/src/tour_service/tour_compilers.js @@ -0,0 +1,432 @@ +/** @odoo-module **/ + +import { browser } from "@web/core/browser/browser"; +import { debounce } from "@web/core/utils/timing"; +import { isVisible } from "@web/core/utils/ui"; +import { tourState } from "./tour_state"; +import { + callWithUnloadCheck, + getConsumeEventType, + getFirstVisibleElement, + getJQueryElementFromSelector, + getScrollParent, + RunningTourActionHelper, +} from "./tour_utils"; + +/** + * @typedef {import("@web/core/macro").MacroDescriptor} MacroDescriptor + * + * @typedef {import("../tour_service/tour_pointer_state").TourPointerState} TourPointerState + * + * @typedef {import("./tour_service").TourStep} TourStep + * + * @typedef {(stepIndex: number, step: TourStep, options: TourCompilerOptions) => MacroDescriptor[]} TourStepCompiler + * + * @typedef TourCompilerOptions + * @property {Tour} tour + * @property {number} stepDelay + * @property {keepWatchBrowser} boolean + * @property {showPointerDuration} number + * @property {*} pointer - used for controlling the pointer of the tour + */ + +/** + * @param {string} selector - any valid jquery selector + * @param {boolean} inModal + * @param {string|undefined} shadowDOM - selector of the shadow root host + * @returns {Element | undefined} + */ +function findTrigger(selector, inModal, shadowDOM) { + const $target = $(shadowDOM ? document.querySelector(shadowDOM)?.shadowRoot : document); + const $visibleModal = $target.find(".modal:visible").last(); + let $el; + if (inModal !== false && $visibleModal.length) { + $el = $visibleModal.find(selector); + } else { + $el = getJQueryElementFromSelector(selector, $target); + } + return getFirstVisibleElement($el).get(0); +} + +/** + * @param {string|undefined} shadowDOM - selector of the shadow root host + */ +function findExtraTrigger(selector, shadowDOM) { + const $target = $(shadowDOM ? document.querySelector(shadowDOM)?.shadowRoot : document); + const $el = getJQueryElementFromSelector(selector, $target); + return getFirstVisibleElement($el).get(0); +} + +function findStepTriggers(step) { + const triggerEl = findTrigger(step.trigger, step.in_modal, step.shadow_dom); + const altEl = findTrigger(step.alt_trigger, step.in_modal, step.shadow_dom); + const skipEl = findTrigger(step.skip_trigger, step.in_modal, step.shadow_dom); + + // `extraTriggerOkay` should be true when `step.extra_trigger` is undefined. + // No need for it to be in the modal. + const extraTriggerOkay = step.extra_trigger + ? findExtraTrigger(step.extra_trigger, step.shadow_dom) + : true; + + return { triggerEl, altEl, extraTriggerOkay, skipEl }; +} + +/** + * @param {TourStep} step + */ +function describeStep(step) { + return step.content ? `${step.content} (trigger: ${step.trigger})` : step.trigger; +} + +/** + * @param {TourStep} step + */ +function describeFailedStepSimple(step, tour) { + return `Tour ${tour.name} failed at step ${describeStep(step)}`; +} + +/** + * @param {TourStep} step + * @param {Tour} tour + */ +function describeFailedStepDetailed(step, tour) { + const offset = 3; + const stepIndex = tour.steps.findIndex((s) => s === step); + const start = stepIndex - offset >= 0 ? stepIndex - offset : 0; + const end = + stepIndex + offset + 1 <= tour.steps.length ? stepIndex + offset + 1 : tour.steps.length; + let result = ""; + for (let i = start; i < end; i++) { + const highlight = i === stepIndex; + const stepString = JSON.stringify( + tour.steps[i], + (_key, value) => { + if (typeof value === "function") { + return "[function]"; + } else { + return value; + } + }, + 2 + ); + result += `\n${highlight ? "----- FAILING STEP -----\n" : ""}${stepString},${ + highlight ? "\n-----------------------" : "" + }`; + } + return `${describeFailedStepSimple(step, tour)}\n\n${result.trim()}`; +} + +/** + * Returns the element that will be used in listening to the `consumeEvent`. + * @param {HTMLElement} el + * @param {string} consumeEvent + */ +function getAnchorEl(el, consumeEvent) { + if (consumeEvent === "drag") { + // jQuery-ui draggable triggers 'drag' events on the .ui-draggable element, + // but the tip is attached to the .ui-draggable-handle element which may + // be one of its children (or the element itself) + return el.closest(".ui-draggable, .o_draggable"); + } + if (consumeEvent === "input" && !["textarea", "input"].includes(el.tagName.toLowerCase())) { + return el.closest("[contenteditable='true']"); + } + if (consumeEvent === "sort") { + // when an element is dragged inside a sortable container (with classname + // 'ui-sortable'), jQuery triggers the 'sort' event on the container + return el.closest(".ui-sortable, .o_sortable"); + } + return el; +} + +/** + * IMPROVEMENT: Consider transitioning (moving) elements? + * @param {Element} el + * @param {TourStep} step + */ +function canContinue(el, step) { + const rootNode = el.getRootNode(); + const isInDoc = + rootNode instanceof ShadowRoot + ? el.ownerDocument.contains(rootNode.host) + : el.ownerDocument.contains(el); + const isElement = el instanceof el.ownerDocument.defaultView.Element || el instanceof Element; + const isBlocked = document.body.classList.contains("o_ui_blocked") || document.querySelector(".o_blockUI"); + return ( + isInDoc && + isElement && + !isBlocked && + (!step.allowInvisible ? isVisible(el) : true) && + (!el.disabled || step.isCheck) + ); +} + +/** + * @param {Object} params + * @param {HTMLElement} params.anchorEl + * @param {string} params.consumeEvent + * @param {() => void} params.onMouseEnter + * @param {() => void} params.onMouseLeave + * @param {(ev: Event) => any} params.onScroll + * @param {(ev: Event) => any} params.onConsume + */ +function setupListeners({ + anchorEl, + consumeEvent, + onMouseEnter, + onMouseLeave, + onScroll, + onConsume, +}) { + anchorEl.addEventListener(consumeEvent, onConsume); + anchorEl.addEventListener("mouseenter", onMouseEnter); + anchorEl.addEventListener("mouseleave", onMouseLeave); + + const cleanups = [ + () => { + anchorEl.removeEventListener(consumeEvent, onConsume); + anchorEl.removeEventListener("mouseenter", onMouseEnter); + anchorEl.removeEventListener("mouseleave", onMouseLeave); + }, + ]; + + const scrollEl = getScrollParent(anchorEl); + if (scrollEl) { + const debouncedOnScroll = debounce(onScroll, 50); + scrollEl.addEventListener("scroll", debouncedOnScroll); + cleanups.push(() => scrollEl.removeEventListener("scroll", debouncedOnScroll)); + } + + return () => { + while (cleanups.length) { + cleanups.pop()(); + } + }; +} + +/** @type {TourStepCompiler} */ +export function compileStepManual(stepIndex, step, options) { + const { tour, pointer, onStepConsummed } = options; + let proceedWith = null; + let removeListeners = () => {}; + + return [ + { + action: () => console.log(step.trigger), + }, + { + trigger: () => { + removeListeners(); + + if (proceedWith) { + return proceedWith; + } + + const { triggerEl, altEl, extraTriggerOkay, skipEl } = findStepTriggers(step); + + if (skipEl) { + return skipEl; + } + + const stepEl = extraTriggerOkay && (triggerEl || altEl); + + if (stepEl && canContinue(stepEl, step)) { + const consumeEvent = step.consumeEvent || getConsumeEventType(stepEl, step.run); + const anchorEl = getAnchorEl(stepEl, consumeEvent); + const debouncedToggleOpen = debounce(pointer.showContent, 50, true); + + const updatePointer = () => { + pointer.setState({ + onMouseEnter: () => debouncedToggleOpen(true), + onMouseLeave: () => debouncedToggleOpen(false), + }); + pointer.pointTo(anchorEl, step); + }; + + removeListeners = setupListeners({ + anchorEl, + consumeEvent, + onMouseEnter: () => pointer.showContent(true), + onMouseLeave: () => pointer.showContent(false), + onScroll: updatePointer, + onConsume: () => { + proceedWith = stepEl; + pointer.hide(); + }, + }); + + updatePointer(); + } else { + pointer.hide(); + } + }, + action: () => { + tourState.set(tour.name, "currentIndex", stepIndex + 1); + pointer.hide(); + proceedWith = null; + onStepConsummed(tour, step); + }, + }, + ]; +} + +let tourTimeout; + +/** @type {TourStepCompiler} */ +export function compileStepAuto(stepIndex, step, options) { + const { tour, pointer, stepDelay, keepWatchBrowser, showPointerDuration, onStepConsummed } = options; + let skipAction = false; + return [ + { + action: async () => { + // This delay is important for making the current set of tour tests pass. + // IMPROVEMENT: Find a way to remove this delay. + await new Promise(resolve => requestAnimationFrame(resolve)) + }, + }, + { + action: async () => { + skipAction = false; + console.log(`Tour ${tour.name} on step: '${describeStep(step)}'`); + if (!keepWatchBrowser) { + browser.clearTimeout(tourTimeout); + tourTimeout = browser.setTimeout(() => { + // The logged text shows the relative position of the failed step. + // Useful for finding the failed step. + console.warn(describeFailedStepDetailed(step, tour)); + // console.error notifies the test runner that the tour failed. + console.error(describeFailedStepSimple(step, tour)); + }, (step.timeout || 10000) + stepDelay); + } + await new Promise((resolve) => browser.setTimeout(resolve, stepDelay)); + }, + }, + { + trigger: () => { + const { triggerEl, altEl, extraTriggerOkay, skipEl } = findStepTriggers(step); + + let stepEl = extraTriggerOkay && (triggerEl || altEl); + + if (skipEl) { + skipAction = true; + stepEl = skipEl; + } + + if (!stepEl) { + return false; + } + + return canContinue(stepEl, step) && stepEl; + }, + action: async (stepEl) => { + tourState.set(tour.name, "currentIndex", stepIndex + 1); + + if (skipAction) { + return; + } + + const consumeEvent = step.consumeEvent || getConsumeEventType(stepEl, step.run); + // When in auto mode, we are not waiting for an event to be consumed, so the + // anchor is just the step element. + const $anchorEl = $(stepEl); + + if (showPointerDuration > 0) { + // Useful in watch mode. + pointer.pointTo($anchorEl.get(0), step); + await new Promise((r) => browser.setTimeout(r, showPointerDuration)); + pointer.hide(); + } + + // TODO: Delegate the following routine to the `ACTION_HELPERS` in the macro module. + const actionHelper = new RunningTourActionHelper({ + consume_event: consumeEvent, + $anchor: $anchorEl, + }); + + let result; + if (typeof step.run === "function") { + const willUnload = await callWithUnloadCheck(() => + // `this.$anchor` is expected in many `step.run`. + step.run.call({ $anchor: $anchorEl }, actionHelper) + ); + result = willUnload && "will unload"; + } else if (step.run !== undefined) { + const m = step.run.match(/^([a-zA-Z0-9_]+) *(?:\(? *(.+?) *\)?)?$/); + actionHelper[m[1]](m[2]); + } else if (!step.isCheck) { + if (stepIndex === tour.steps.length - 1) { + console.warn('Tour %s: ignoring action (auto) of last step', tour.name); + } else { + actionHelper.auto(); + } + } + + return result; + }, + }, + { + action: () => { + onStepConsummed(tour, step); + }, + }, + ]; +} + +/** + * @param {import("./tour_service").Tour} tour + * @param {object} options + * @param {TourStep[]} options.filteredSteps + * @param {TourStepCompiler} options.stepCompiler + * @param {*} options.pointer + * @param {number} options.stepDelay + * @param {boolean} options.keepWatchBrowser + * @param {number} options.showPointerDuration + * @param {number} options.checkDelay + * @param {(import("./tour_service").Tour) => void} options.onTourEnd + */ +export function compileTourToMacro(tour, options) { + const { + filteredSteps, + stepCompiler, + pointer, + stepDelay, + keepWatchBrowser, + showPointerDuration, + checkDelay, + onStepConsummed, + onTourEnd, + } = options; + const currentStepIndex = tourState.get(tour.name, "currentIndex"); + return { + ...tour, + checkDelay, + steps: filteredSteps + .reduce((newSteps, step, i) => { + if (i < currentStepIndex) { + // Don't include steps before the current index because they're already done. + return newSteps; + } else { + return [ + ...newSteps, + ...stepCompiler(i, step, { + tour, + pointer, + stepDelay, + keepWatchBrowser, + showPointerDuration, + onStepConsummed, + }), + ]; + } + }, []) + .concat([ + { + action() { + tourState.clear(tour.name); + onTourEnd(tour); + clearTimeout(tourTimeout); + }, + }, + ]), + }; +} diff --git a/static/src/tour_service/tour_pointer_state.js b/static/src/tour_service/tour_pointer_state.js new file mode 100644 index 0000000..94cedb4 --- /dev/null +++ b/static/src/tour_service/tour_pointer_state.js @@ -0,0 +1,181 @@ +/** @odoo-module **/ + +import { reactive } from "@odoo/owl"; +import { _t } from "@web/core/l10n/translation"; +import { TourPointer } from "@web_tour/tour_pointer/tour_pointer"; +import { getScrollParent } from "./tour_utils"; + +/** + * @typedef {import("@web/core/position_hook").Direction} Direction + * + * @typedef {"in" | "out-below" | "out-above" | "unknown"} IntersectionPosition + * + * @typedef {ReturnType["methods"]} TourPointerMethods + * + * @typedef TourPointerState + * @property {HTMLElement} [anchor] + * @property {string} [content] + * @property {boolean} [isOpen] + * @property {() => {}} [onClick] + * @property {() => {}} [onMouseEnter] + * @property {() => {}} [onMouseLeave] + * @property {boolean} isVisible + * @property {Direction} position + * @property {number} rev + * + * @typedef {import("./tour_service").TourStep} TourStep + */ + +class Intersection { + constructor() { + /** @type {Element | null} */ + this.currentTarget = null; + this.rootBounds = null; + /** @type {IntersectionPosition} */ + this._targetPosition = "unknown"; + this._observer = new IntersectionObserver((observations) => + this._handleObservations(observations) + ); + } + + /** @type {IntersectionObserverCallback} */ + _handleObservations(observations) { + if (observations.length < 1) { + return; + } + const observation = observations[observations.length - 1]; + this.rootBounds = observation.rootBounds; + if (this.rootBounds && this.currentTarget) { + if (observation.isIntersecting) { + this._targetPosition = "in"; + } else { + const targetBounds = this.currentTarget.getBoundingClientRect(); + if (targetBounds.bottom < this.rootBounds.height / 2) { + this._targetPosition = "out-above"; + } else if (targetBounds.top > this.rootBounds.height / 2) { + this._targetPosition = "out-below"; + } + } + } else { + this._targetPosition = "unknown"; + } + } + + get targetPosition() { + if (!this.rootBounds) { + return this.currentTarget ? "in" : "unknown"; + } else { + return this._targetPosition; + } + } + + /** + * @param {Element} newTarget + */ + setTarget(newTarget) { + if (this.currentTarget !== newTarget) { + if (this.currentTarget) { + this._observer.unobserve(this.currentTarget); + } + if (newTarget) { + this._observer.observe(newTarget); + } + this.currentTarget = newTarget; + } + } + + stop() { + this._observer.disconnect(); + } +} + +export function createPointerState() { + /** + * @param {Partial} newState + */ + const setState = (newState) => { + Object.assign(state, newState); + }; + + /** + * @param {TourStep} step + * @param {HTMLElement} [anchor] + */ + const pointTo = (anchor, step) => { + intersection.setTarget(anchor); + if (anchor) { + let { position, content } = step; + switch (intersection.targetPosition) { + case "unknown": { + // Do nothing for unknown target position. + break; + } + case "in": { + if (document.body.contains(floatingAnchor)) { + floatingAnchor.remove(); + } + setState({ anchor, content, onClick: null, position, isVisible: true }); + break; + } + default: { + const onClick = () => { + anchor.scrollIntoView({ behavior: "smooth", block: "nearest" }); + hide(); + }; + + const scrollParent = getScrollParent(anchor); + if (!scrollParent) { + setState({ anchor, content, onClick: null, position, isVisible: true }); + return; + } + const { x, y, width, height } = scrollParent.getBoundingClientRect(); + floatingAnchor.style.left = `${x + width / 2}px`; + if (intersection.targetPosition === "out-below") { + position = "top"; + content = _t("Scroll down to reach the next step."); + floatingAnchor.style.top = `${y + height - TourPointer.height}px`; + } else if (intersection.targetPosition === "out-above") { + position = "bottom"; + content = _t("Scroll up to reach the next step."); + floatingAnchor.style.top = `${y + TourPointer.height}px`; + } + if (!document.contains(floatingAnchor)) { + document.body.appendChild(floatingAnchor); + } + setState({ + anchor: floatingAnchor, + content, + onClick, + position, + isVisible: true, + }); + } + } + } else { + hide(); + } + }; + + function hide() { + setState({ content: "", isVisible: false, isOpen: false }); + } + + function showContent(isOpen) { + setState({ isOpen }); + } + + function destroy() { + intersection.stop(); + if (document.body.contains(floatingAnchor)) { + floatingAnchor.remove(); + } + } + + /** @type {TourPointerState} */ + const state = reactive({}); + const intersection = new Intersection(); + const floatingAnchor = document.createElement("div"); + floatingAnchor.className = "position-fixed"; + + return { state, methods: { setState, showContent, pointTo, hide, destroy } }; +} diff --git a/static/src/tour_service/tour_service.js b/static/src/tour_service/tour_service.js new file mode 100644 index 0000000..8659675 --- /dev/null +++ b/static/src/tour_service/tour_service.js @@ -0,0 +1,412 @@ +/** @odoo-module **/ + +import { EventBus, markup, whenReady, reactive } from "@odoo/owl"; +import { browser } from "@web/core/browser/browser"; +import { _t } from "@web/core/l10n/translation"; +import { MacroEngine } from "@web/core/macro"; +import { registry } from "@web/core/registry"; +import { config as transitionConfig } from "@web/core/transition"; +import { session } from "@web/session"; +import { TourPointer } from "../tour_pointer/tour_pointer"; +import { compileStepAuto, compileStepManual, compileTourToMacro } from "./tour_compilers"; +import { createPointerState } from "./tour_pointer_state"; +import { tourState } from "./tour_state"; +import { callWithUnloadCheck } from "./tour_utils"; + +/** + * @typedef {string} JQuerySelector + * @typedef {import("./tour_utils").RunCommand} RunCommand + * + * @typedef Tour + * @property {string} url + * @property {string} name + * @property {() => TourStep[]} steps + * @property {boolean} [rainbowMan] + * @property {number} [sequence] + * @property {boolean} [test] + * @property {Promise} [wait_for] + * @property {string} [saveAs] + * @property {string} [fadeout] + * @property {number} [checkDelay] + * @property {string|undefined} [shadow_dom] + * + * @typedef TourStep + * @property {string} [id] + * @property {JQuerySelector} trigger + * @property {JQuerySelector} [extra_trigger] + * @property {JQuerySelector} [alt_trigger] + * @property {JQuerySelector} [skip_trigger] + * @property {string} [content] + * @property {"top" | "botton" | "left" | "right"} [position] + * @property {"community" | "enterprise"} [edition] + * @property {RunCommand} [run] + * @property {boolean} [auto] + * @property {boolean} [in_modal] + * @property {number} [width] + * @property {number} [timeout] + * @property {boolean} [consumeVisibleOnly] + * @property {boolean} [noPrepend] + * @property {string} [consumeEvent] + * @property {boolean} [mobile] + * @property {string} [title] + * @property {string|false|undefined} [shadow_dom] + * + * @typedef {"manual" | "auto"} TourMode + */ + +export const tourService = { + // localization dependency to make sure translations used by tours are loaded + dependencies: ["orm", "effect", "ui", "overlay", "localization"], + start: async (_env, { orm, effect, ui, overlay }) => { + await whenReady(); + const toursEnabled = "tour_disable" in session && !session.tour_disable; + const consumedTours = new Set(session.web_tours); + + /** @type {{ [k: string]: Tour }} */ + const tours = {}; + const tourRegistry = registry.category("web_tour.tours"); + function register(name, tour) { + name = tour.saveAs || name; + const wait_for = tour.wait_for || Promise.resolve(); + let steps; + tours[name] = { + wait_for, + name, + get steps() { + if (typeof tour.steps !== "function") { + throw new Error(`tour.steps has to be a function that returns TourStep[]`); + } + if (!steps) { + steps = tour.steps().map((step) => { + step.shadow_dom = step.shadow_dom ?? tour.shadow_dom; + return step; + }); + } + return steps; + }, + shadow_dom: tour.shadow_dom, + url: tour.url, + rainbowMan: tour.rainbowMan === undefined ? true : !!tour.rainbowMan, + rainbowManMessage: tour.rainbowManMessage, + fadeout: tour.fadeout || "medium", + sequence: tour.sequence || 1000, + test: tour.test, + checkDelay: tour.checkDelay, + }; + wait_for.then(() => { + if ( + !tour.test && + toursEnabled && + !consumedTours.has(name) && + !tourState.getActiveTourNames().includes(name) + ) { + startTour(name, { mode: "manual", redirect: false }); + } + }); + } + for (const [name, tour] of tourRegistry.getEntries()) { + register(name, tour); + } + tourRegistry.addEventListener("UPDATE", ({ detail: { key, value } }) => { + if (tourRegistry.contains(key)) { + register(key, value); + if ( + tourState.getActiveTourNames().includes(key) && + // Don't resume onboarding tours when tours are disabled + (toursEnabled || tourState.get(key, "mode") === "auto") + ) { + resumeTour(key); + } + } else { + delete tours[value]; + } + }); + + const bus = new EventBus(); + const macroEngine = new MacroEngine({ target: document }); + + const pointers = reactive({}); + /** @type {Set} */ + const runningTours = new Set(); + + // FIXME: this is a hack for stable: whenever the macros advance, for each call to pointTo, + // we push a function that will do the pointing as well as the tour name. Then after + // a microtask tick, when all pointTo calls have been made by the macro system, we can sort + // these by tour priority/sequence and only call the one with the highest priority so we + // show the correct pointer. + const possiblePointTos = []; + function createPointer(tourName, config) { + const { state: pointerState, methods } = createPointerState(); + let remove; + return { + start() { + pointers[tourName] = { + methods, + id: tourName, + component: TourPointer, + props: { pointerState, ...config }, + }; + remove = overlay.add(pointers[tourName].component, pointers[tourName].props); + }, + stop() { + remove?.(); + delete pointers[tourName]; + methods.destroy(); + }, + ...methods, + async pointTo(anchor, step) { + possiblePointTos.push([tourName, () => methods.pointTo(anchor, step)]); + await Promise.resolve(); + // only done once per macro advance + if (!possiblePointTos.length) { + return; + } + const toursByPriority = Object.fromEntries( + getSortedTours().map((t, i) => [t.name, i]) + ); + const sortedPointTos = possiblePointTos + .slice(0) + .sort(([a], [b]) => toursByPriority[a] - toursByPriority[b]); + possiblePointTos.splice(0); // reset for the next macro advance + + const active = sortedPointTos[0]; + const [activeId, enablePointer] = active || []; + for (const { id, methods } of Object.values(pointers)) { + if (id === activeId) { + enablePointer(); + } else { + methods.hide(); + } + } + }, + }; + } + + /** + * @param {TourStep} step + * @param {TourMode} mode + */ + function shouldOmit(step, mode) { + const isDefined = (key, obj) => key in obj && obj[key] !== undefined; + const getEdition = () => + (session.server_version_info || []).at(-1) === "e" ? "enterprise" : "community"; + const correctEdition = isDefined("edition", step) + ? step.edition === getEdition() + : true; + const correctDevice = isDefined("mobile", step) ? step.mobile === ui.isSmall : true; + return ( + !correctEdition || + !correctDevice || + // `step.auto = true` means omitting a step in a manual tour. + (mode === "manual" && step.auto) + ); + } + + /** + * @param {Tour} tour + * @param {ReturnType} pointer + * @param {Object} options + * @param {TourMode} options.mode + * @param {number} options.stepDelay + * @param {boolean} options.keepWatchBrowser - do not close watch browser when the tour failed + * @param {number} options.showPointerDuration + * - Useful when watching auto tour. + * - Show the pointer for some duration before performing calling the run method. + */ + function convertToMacro( + tour, + pointer, + { mode, stepDelay, keepWatchBrowser, showPointerDuration } + ) { + // IMPROVEMENTS: Custom step compiler. Will probably require decoupling from `mode`. + const stepCompiler = mode === "auto" ? compileStepAuto : compileStepManual; + const checkDelay = mode === "auto" ? tour.checkDelay : 100; + const filteredSteps = tour.steps.filter((step) => !shouldOmit(step, mode)); + return compileTourToMacro(tour, { + filteredSteps, + stepCompiler, + pointer, + stepDelay, + keepWatchBrowser, + showPointerDuration, + checkDelay, + onStepConsummed(tour, step) { + bus.trigger("STEP-CONSUMMED", { tour, step }); + }, + onTourEnd({ name, rainbowManMessage, fadeout }) { + if (mode === "auto") { + transitionConfig.disabled = false; + } + let message; + if (typeof rainbowManMessage === "function") { + message = rainbowManMessage({ + isTourConsumed: (name) => consumedTours.has(name), + }); + } else if (typeof rainbowManMessage === "string") { + message = rainbowManMessage; + } else { + message = markup( + _t( + "Good job! You went through all steps of this tour." + ) + ); + } + effect.add({ type: "rainbow_man", message, fadeout }); + if (mode === "manual") { + consumedTours.add(name); + orm.call("web_tour.tour", "consume", [[name]]); + } + pointer.stop(); + // Used to signal the python test runner that the tour finished without error. + browser.console.log("test successful"); + runningTours.delete(name); + }, + }); + } + + /** + * Wait for the shadow hosts matching the given selectors to + * appear in the DOM then, register the underlying shadow roots + * to the macro engine observer in order to listen to the + * changes in the shadow DOM. + * + * @param {Set} shadowHostSelectors + */ + function observeShadows(shadowHostSelectors) { + const observer = new MutationObserver(() => { + const shadowRoots = []; + for (const selector of shadowHostSelectors) { + const shadowHost = document.querySelector(selector); + if (shadowHost) { + shadowRoots.push(shadowHost.shadowRoot); + shadowHostSelectors.delete(selector); + } + } + for (const shadowRoot of shadowRoots) { + macroEngine.observer.observe(shadowRoot, macroEngine.observerOptions); + } + if (shadowHostSelectors.size === 0) { + observer.disconnect(); + } + }); + observer.observe(macroEngine.target, { childList: true, subtree: true }); + } + + /** + * Register shadow roots that must be observed by the tour to + * the macro engine. + * + * @param {Tour} tour + */ + function setupShadowObservers(tour) { + const shadowDOMs = new Set( + tour.steps.filter((step) => step.shadow_dom).map((step) => step.shadow_dom) + ); + if (shadowDOMs.size > 0) { + observeShadows(shadowDOMs); + } + } + + /** + * Disable transition before starting an "auto" tour. + * @param {Macro} macro + * @param {'auto' | 'manual'} mode + */ + function activateMacro(macro, mode) { + if (mode === "auto") { + transitionConfig.disabled = true; + } + macroEngine.activate(macro, mode === "auto"); + } + + function startTour(tourName, options = {}) { + if (runningTours.has(tourName) && options.mode === "manual") { + return; + } + runningTours.add(tourName); + const defaultOptions = { + stepDelay: 0, + keepWatchBrowser: false, + mode: "auto", + startUrl: "", + showPointerDuration: 0, + redirect: true, + }; + options = Object.assign(defaultOptions, options); + const tour = tours[tourName]; + if (!tour) { + throw new Error(`Tour '${tourName}' is not found.`); + } + tourState.set(tourName, "currentIndex", 0); + tourState.set(tourName, "stepDelay", options.stepDelay); + tourState.set(tourName, "keepWatchBrowser", options.keepWatchBrowser); + tourState.set(tourName, "showPointerDuration", options.showPointerDuration); + tourState.set(tourName, "mode", options.mode); + tourState.set(tourName, "sequence", tour.sequence); + const pointer = createPointer(tourName, { + bounce: !(options.mode === "auto" && options.keepWatchBrowser), + }); + const macro = convertToMacro(tour, pointer, options); + const willUnload = callWithUnloadCheck(() => { + if (tour.url && tour.url !== options.startUrl && options.redirect) { + window.location.href = window.location.origin + tour.url; + } + }); + if (!willUnload) { + setupShadowObservers(tour); + pointer.start(); + activateMacro(macro, options.mode); + } + } + + function resumeTour(tourName) { + if (runningTours.has(tourName)) { + return; + } + runningTours.add(tourName); + const tour = tours[tourName]; + const stepDelay = tourState.get(tourName, "stepDelay"); + const keepWatchBrowser = tourState.get(tourName, "keepWatchBrowser"); + const showPointerDuration = tourState.get(tourName, "showPointerDuration"); + const mode = tourState.get(tourName, "mode"); + const pointer = createPointer(tourName, { + bounce: !(mode === "auto" && keepWatchBrowser), + }); + const macro = convertToMacro(tour, pointer, { + mode, + stepDelay, + keepWatchBrowser, + showPointerDuration, + }); + setupShadowObservers(tour); + pointer.start(); + activateMacro(macro, mode); + } + + function getSortedTours() { + return Object.values(tours).sort((t1, t2) => { + return t1.sequence - t2.sequence || (t1.name < t2.name ? -1 : 1); + }); + } + + if (!window.frameElement) { + // Resume running tours. + for (const tourName of tourState.getActiveTourNames()) { + if (tourName in tours) { + resumeTour(tourName); + } + } + } + + odoo.startTour = startTour; + odoo.isTourReady = (tourName) => tours[tourName].wait_for.then(() => true); + + return { + bus, + startTour, + getSortedTours, + }; + }, +}; + +registry.category("services").add("tour_service", tourService); diff --git a/static/src/tour_service/tour_state.js b/static/src/tour_service/tour_state.js new file mode 100644 index 0000000..b18ae43 --- /dev/null +++ b/static/src/tour_service/tour_state.js @@ -0,0 +1,85 @@ +/** @odoo-module **/ + +import { browser } from "@web/core/browser/browser"; + +const BOOLEAN = { + toLocalStorage: (val) => (val ? "1" : "0"), + fromLocalStorage: (val) => (val === "1" ? true : false), +}; + +const INTEGER = { + toLocalStorage: (val) => val.toString(), + fromLocalStorage: (val) => parseInt(val, 10), +}; + +const STRING = { + toLocalStorage: (x) => x, + fromLocalStorage: (x) => x, +}; + +const ALLOWED_KEYS = { + // Don't close the 'watch' browser when the tour failed. + keepWatchBrowser: BOOLEAN, + + // Duration at which the pointer is shown in auto mode. + showPointerDuration: INTEGER, + + // Index of the current step. + currentIndex: INTEGER, + + // Global step delay that is specified before starting the tour. + stepDelay: INTEGER, + + // 'auto' | 'manual' - important that it's persisted because it's only specified during start of tour. + mode: STRING, + + // Used to order the tours. + sequence: INTEGER, +}; + +function getPrefixedName(tourName, key) { + return `tour__${tourName}__${key}`; +} + +function destructurePrefixedName(prefixedName) { + const match = prefixedName.match(/tour__([.\w]+)__([\w]+)/); + return match ? [match[1], match[2]] : null; +} + +/** + * Wrapper around localStorage for persistence of the running tours. + * Useful for resuming running tours when the page refreshed. + */ +export const tourState = { + get(tourName, key) { + if (!(key in ALLOWED_KEYS)) { + throw new Error(`Invalid key: '${key}' (tourName = '${tourName}')`); + } + const prefixedName = getPrefixedName(tourName, key); + const savedValue = browser.localStorage.getItem(prefixedName); + return ALLOWED_KEYS[key].fromLocalStorage(savedValue); + }, + set(tourName, key, value) { + if (!(key in ALLOWED_KEYS)) { + throw new Error(`Invalid key: '${key}' (tourName = '${tourName}')`); + } + const prefixedName = getPrefixedName(tourName, key); + browser.localStorage.setItem(prefixedName, ALLOWED_KEYS[key].toLocalStorage(value)); + }, + clear(tourName) { + for (const key in ALLOWED_KEYS) { + const prefixedName = getPrefixedName(tourName, key); + browser.localStorage.removeItem(prefixedName); + } + }, + getActiveTourNames() { + const tourNames = new Set(); + for (const key of Object.keys(browser.localStorage)) { + const [tourName] = destructurePrefixedName(key) || [false]; + if (tourName) { + tourNames.add(tourName); + } + } + return [...tourNames].sort((a, b) => this.get(a, "sequence") - this.get(b, "sequence")); + }, +}; diff --git a/static/src/tour_service/tour_utils.js b/static/src/tour_service/tour_utils.js new file mode 100644 index 0000000..a2125e8 --- /dev/null +++ b/static/src/tour_service/tour_utils.js @@ -0,0 +1,654 @@ +/** @odoo-module **/ + +import { markup } from "@odoo/owl"; +import { _t } from "@web/core/l10n/translation"; +import { utils } from "@web/core/ui/ui_service"; +import { _legacyIsVisible } from "@web/core/utils/ui"; + +/** + * @typedef {string | (actions: RunningTourActionHelper) => void | Promise} RunCommand + */ + +export class TourError extends Error { + constructor(message, ...args) { + super(message, ...args); + this.message = `(TourError) ${message}`; + } +} + +/** + * Calls the given `func` then returns/resolves to `true` + * if it will result to unloading of the page. + * @param {(...args: any[]) => void} func + * @param {any[]} args + * @returns {boolean | Promise} + */ +export function callWithUnloadCheck(func, ...args) { + let willUnload = false; + const beforeunload = () => (willUnload = true); + window.addEventListener("beforeunload", beforeunload); + const result = func(...args); + if (result instanceof Promise) { + return result.then(() => { + window.removeEventListener("beforeunload", beforeunload); + return willUnload; + }); + } else { + window.removeEventListener("beforeunload", beforeunload); + return willUnload; + } +} + +export function getFirstVisibleElement($elements) { + for (var i = 0; i < $elements.length; i++) { + var $i = $elements.eq(i); + if (_legacyIsVisible($i[0])) { + return $i; + } + } + return $(); +} + +/** + * @param {JQuery|undefined} target + */ +export function getJQueryElementFromSelector(selector, $target) { + $target = $target || $(document); + const iframeSplit = typeof selector === "string" && selector.match(/(.*\biframe[^ ]*)(.*)/); + if (iframeSplit && iframeSplit[2]) { + var $iframe = $target.find(`${iframeSplit[1]}:not(.o_ignore_in_tour)`); + if ($iframe.is('[is-ready="false"]')) { + return $(); + } + var $el = $iframe.contents().find(iframeSplit[2]); + $el.iframeContainer = $iframe[0]; + return $el; + } else if (typeof selector === "string") { + return $target.find(selector); + } else { + return $(selector); + } +} + +/** + * @param {HTMLElement} [element] + * @param {RunCommand} [runCommand] + * @returns {string} + */ +export function getConsumeEventType(element, runCommand) { + if (!element) { + return "click"; + } + const { classList, tagName, type } = element; + const tag = tagName.toLowerCase(); + + // Many2one + if (classList.contains("o_field_many2one")) { + return "autocompleteselect"; + } + + // Inputs and textareas + if ( + tag === "textarea" || + (tag === "input" && + (!type || + ["email", "number", "password", "search", "tel", "text", "url"].includes(type))) + ) { + if ( + utils.isSmall() && + element.closest(".o_field_widget")?.matches(".o_field_many2one, .o_field_many2many") + ) { + return "click"; + } + return "input"; + } + + // jQuery draggable + if (classList.contains("ui-draggable-handle")) { + return "mousedown"; + } + + // Drag & drop run command + if (typeof runCommand === "string" && /^drag_and_drop/.test(runCommand)) { + // this is a heuristic: the element has to be dragged and dropped but it + // doesn't have class 'ui-draggable-handle', so we check if it has an + // ui-sortable parent, and if so, we conclude that its event type is 'sort' + if (element.closest(".ui-sortable")) { + return "sort"; + } + if ( + (/^drag_and_drop_native/.test(runCommand) && classList.contains("o_draggable")) || + element.closest(".o_draggable") + ) { + return "pointerdown"; + } + } + + // Default: click + return "click"; +} + +/** + * ! This function is a copy-paste of its namesake in web/static/tests/helpers/utils.js + * TODO: Unify utils for tests and tours since they're doing the exact same thing + * @param {Node} n1 + * @param {Node} n2 + * @returns {Node[]} + */ +export function getDifferentParents(n1, n2) { + const parents = [n2]; + while (parents[0].parentNode) { + const parent = parents[0].parentNode; + if (parent.contains(n1)) { + break; + } + parents.unshift(parent); + } + return parents; +} + +/** + * @param {HTMLElement} element + * @returns {HTMLElement | null} + */ +export function getScrollParent(element) { + if (!element) { + return null; + } + if (element.scrollHeight > element.clientHeight) { + return element; + } else { + return getScrollParent(element.parentNode); + } +} + +/** + * @param {HTMLElement} el + * @param {string} type + * @param {boolean} canBubbleAndBeCanceled + * @param {PointerEventInit} [additionalParams] + */ +export const triggerPointerEvent = (el, type, canBubbleAndBeCanceled, additionalParams) => { + const eventInit = { + bubbles: canBubbleAndBeCanceled, + cancelable: canBubbleAndBeCanceled, + view: window, + ...additionalParams, + }; + + el.dispatchEvent(new PointerEvent(type, eventInit)); + if (type.startsWith("pointer")) { + el.dispatchEvent(new MouseEvent(type.replace("pointer", "mouse"), eventInit)); + } +}; + +export class RunningTourActionHelper { + constructor(tip_widget) { + this.tip_widget = tip_widget; + } + click(element) { + this._click(this._get_action_values(element)); + } + dblclick(element) { + this._click(this._get_action_values(element), 2); + } + tripleclick(element) { + this._click(this._get_action_values(element), 3); + } + clicknoleave(element) { + this._click(this._get_action_values(element), 1, false); + } + text(text, element) { + this._text(this._get_action_values(element), text); + } + remove_text(text, element) { + this._text(this._get_action_values(element), "\n"); + } + text_blur(text, element) { + this._text_blur(this._get_action_values(element), text); + } + range(text, element) { + this._range(this._get_action_values(element), text); + } + drag_and_drop(to, element) { + this._drag_and_drop_jquery(this._get_action_values(element), to); + } + drag_and_drop_native(toSel, element) { + const to = getJQueryElementFromSelector(toSel)[0]; + this._drag_and_drop(this._get_action_values(element).$element[0], to); + } + keydown(keyCodes, element) { + this._keydown(this._get_action_values(element), keyCodes.split(/[,\s]+/)); + } + auto(element) { + var values = this._get_action_values(element); + if (values.consume_event === "input") { + this._text(values); + } else { + this._click(values); + } + } + _get_action_values(element) { + var $e = getJQueryElementFromSelector(element); + var $element = element ? getFirstVisibleElement($e) : this.tip_widget.$anchor; + if ($element.length === 0) { + $element = $e.first(); + } + var consume_event = element + ? getConsumeEventType($element[0]) + : this.tip_widget.consume_event; + return { + $element: $element, + consume_event: consume_event, + }; + } + _click(values, nb, leave) { + const target = values.$element[0]; + triggerPointerEvent(target, "pointerover", true); + triggerPointerEvent(target, "pointerenter", false); + triggerPointerEvent(target, "pointermove", true); + for (let i = 1; i <= (nb || 1); i++) { + triggerPointerEvent(target, "pointerdown", true); + triggerPointerEvent(target, "pointerup", true); + triggerPointerEvent(target, "click", true, { detail: i }); + if (i % 2 === 0) { + triggerPointerEvent(target, "dblclick", true); + } + } + if (leave !== false) { + triggerPointerEvent(target, "pointerout", true); + triggerPointerEvent(target, "pointerleave", false); + } + } + _text(values, text) { + this._click(values); + + text = text || "Test"; + if (values.consume_event === "input") { + values.$element + .trigger({ type: "keydown", key: text[text.length - 1] }) + .val(text) + .trigger({ type: "keyup", key: text[text.length - 1] }); + values.$element[0].dispatchEvent( + new InputEvent("input", { + bubbles: true, + }) + ); + } else if (values.$element.is("select")) { + var $options = values.$element.find("option"); + $options.prop("selected", false).removeProp("selected"); + var $selectedOption = $options.filter(function () { + return $(this).val() === text; + }); + if ($selectedOption.length === 0) { + $selectedOption = $options.filter(function () { + return $(this).text().trim() === text; + }); + } + const regex = /option\s+([0-9]+)/; + if ($selectedOption.length === 0 && regex.test(text)) { + // Extract position as 1-based, as the nth selectors. + const position = parseInt(regex.exec(text)[1]); + $selectedOption = $options.eq(position - 1); // eq is 0-based. + } + $selectedOption.prop("selected", true); + this._click(values); + // For situations where an `oninput` is defined. + values.$element.trigger("input"); + } else { + values.$element.focusIn(); + values.$element.trigger($.Event("keydown", { key: "_" })); + values.$element.text(text).trigger("input"); + values.$element.focusInEnd(); + values.$element.trigger($.Event("keyup", { key: "_" })); + } + values.$element[0].dispatchEvent(new Event("change", { bubbles: true, cancelable: false })); + } + _text_blur(values, text) { + this._text(values, text); + values.$element.trigger("focusout"); + values.$element.trigger("blur"); + } + _range(values, text) { + values.$element[0].value = text; + values.$element[0].dispatchEvent(new Event('change', { bubbles: true, cancelable: false })); + } + _calculateCenter($el, selector) { + const center = $el.offset(); + if (selector && selector.indexOf("iframe") !== -1) { + const iFrameOffset = $("iframe").offset(); + center.left += iFrameOffset.left; + center.top += iFrameOffset.top; + } + center.left += $el.outerWidth() / 2; + center.top += $el.outerHeight() / 2; + return center; + } + _drag_and_drop_jquery(values, to) { + var $to; + const elementCenter = this._calculateCenter(values.$element); + if (to) { + $to = getJQueryElementFromSelector(to); + } else { + $to = $(document.body); + } + + values.$element.trigger($.Event("mouseenter")); + // Make the web_studio tour test happy. My guess is that 50%+ of the length of the dragged element + // must be situated to the right of the $to element. + values.$element.trigger( + $.Event("mousedown", { + which: 1, + pageX: elementCenter.left + 1, + pageY: elementCenter.top, + }) + ); + // Some tests depends on elements present only when the element to drag + // start to move while some other tests break while moving. + if (!$to.length) { + values.$element.trigger( + $.Event("mousemove", { + which: 1, + pageX: elementCenter.left + 1, + pageY: elementCenter.top, + }) + ); + $to = getJQueryElementFromSelector(to); + } + + let toCenter = this._calculateCenter($to, to); + values.$element.trigger( + $.Event("mousemove", { which: 1, pageX: toCenter.left, pageY: toCenter.top }) + ); + // Recalculate the center as the mousemove might have made the element bigger. + toCenter = this._calculateCenter($to, to); + values.$element.trigger( + $.Event("mouseup", { which: 1, pageX: toCenter.left, pageY: toCenter.top }) + ); + } + /** + * ! This function is a reduced version of "drag" in web/static/tests/helpers/utils.js + * TODO: Unify utils for tests and tours since they're doing the exact same thing + * @param {HTMLElement} source + * @param {HTMLElement} target + */ + _drag_and_drop(source, target) { + const sourceRect = source.getBoundingClientRect(); + const sourcePosition = { + clientX: sourceRect.x + sourceRect.width / 2, + clientY: sourceRect.y + sourceRect.height / 2, + }; + + const targetRect = target.getBoundingClientRect(); + const targetPosition = { + clientX: targetRect.x + targetRect.width / 2, + clientY: targetRect.y + targetRect.height / 2, + }; + + triggerPointerEvent(source, "pointerdown", true, sourcePosition); + triggerPointerEvent(source, "pointermove", true, targetPosition); + + for (const parent of getDifferentParents(source, target)) { + triggerPointerEvent(parent, "pointerenter", false, targetPosition); + } + + triggerPointerEvent(target, "pointerup", true, targetPosition); + } + _keydown(values, keyCodes) { + while (keyCodes.length) { + const eventOptions = {}; + const keyCode = keyCodes.shift(); + let insertedText = null; + if (isNaN(keyCode)) { + eventOptions.key = keyCode; + } else { + const code = parseInt(keyCode, 10); + if ( + code === 32 || // spacebar + (code > 47 && code < 58) || // number keys + (code > 64 && code < 91) || // letter keys + (code > 95 && code < 112) || // numpad keys + (code > 185 && code < 193) || // ;=,-./` (in order) + (code > 218 && code < 223) // [\]' (in order)) + ) { + insertedText = String.fromCharCode(code); + } + } + values.$element.trigger(Object.assign({ type: "keydown" }, eventOptions)); + if (insertedText) { + document.execCommand("insertText", 0, insertedText); + } + values.$element.trigger(Object.assign({ type: "keyup" }, eventOptions)); + } + } +} + +export const stepUtils = { + _getHelpMessage(functionName, ...args) { + return `Generated by function tour utils ${functionName}(${args.join(", ")})`; + }, + + addDebugHelp(helpMessage, step) { + if (typeof step.debugHelp === "string") { + step.debugHelp = step.debugHelp + "\n" + helpMessage; + } else { + step.debugHelp = helpMessage; + } + return step; + }, + + editionEnterpriseModifier(step) { + step.edition = "enterprise"; + return step; + }, + + mobileModifier(step) { + step.mobile = true; + return step; + }, + + showAppsMenuItem() { + return { + edition: "community", + trigger: ".o_navbar_apps_menu button", + auto: true, + position: "bottom", + }; + }, + + toggleHomeMenu() { + return { + edition: "enterprise", + trigger: ".o_main_navbar .o_menu_toggle", + content: markup(_t("Click on the Home icon to navigate across apps.")), + position: "bottom", + }; + }, + + autoExpandMoreButtons(extra_trigger) { + return { + trigger: ".o-form-buttonbox", + extra_trigger: extra_trigger, + auto: true, + run: (actions) => { + const $more = $(".o-form-buttonbox .o_button_more"); + if ($more.length) { + actions.click($more); + } + }, + }; + }, + + goBackBreadcrumbsMobile(description, ...extraTrigger) { + return extraTrigger.map((element) => ({ + mobile: true, + trigger: ".o_back_button", + extra_trigger: element, + content: description, + position: "bottom", + debugHelp: this._getHelpMessage( + "goBackBreadcrumbsMobile", + description, + ...extraTrigger + ), + })); + }, + + goToAppSteps(dataMenuXmlid, description) { + return [ + this.showAppsMenuItem(), + { + trigger: `.o_app[data-menu-xmlid="${dataMenuXmlid}"]`, + content: description, + position: "right", + edition: "community", + }, + { + trigger: `.o_app[data-menu-xmlid="${dataMenuXmlid}"]`, + content: description, + position: "bottom", + edition: "enterprise", + }, + ].map((step) => + this.addDebugHelp(this._getHelpMessage("goToApp", dataMenuXmlid, description), step) + ); + }, + + openBurgerMenu(extraTrigger) { + return { + mobile: true, + trigger: ".o_mobile_menu_toggle", + extra_trigger: extraTrigger, + content: _t("Open bugger menu."), + position: "bottom", + debugHelp: this._getHelpMessage("openBurgerMenu", extraTrigger), + }; + }, + + statusbarButtonsSteps(innerTextButton, description, extraTrigger) { + return [ + { + mobile: true, + auto: true, + trigger: ".o_statusbar_buttons", + extra_trigger: extraTrigger, + run: (actions) => { + const $action = $(".o_statusbar_buttons .btn.dropdown-toggle:contains(Action)"); + if ($action.length) { + actions.click($action); + } + }, + }, + { + trigger: `.o_statusbar_buttons button:enabled:contains('${innerTextButton}')`, + content: description, + position: "bottom", + }, + ].map((step) => + this.addDebugHelp( + this._getHelpMessage( + "statusbarButtonsSteps", + innerTextButton, + description, + extraTrigger + ), + step + ) + ); + }, + + simulateEnterKeyboardInSearchModal() { + return { + mobile: true, + trigger: ".o_searchview_input", + extra_trigger: ".modal:not(.o_inactive_modal) .dropdown-menu.o_searchview_autocomplete", + position: "bottom", + run: (action) => { + const keyEventEnter = new KeyboardEvent("keydown", { + bubbles: true, + cancelable: true, + key: "Enter", + code: "Enter", + }); + action.tip_widget.$anchor[0].dispatchEvent(keyEventEnter); + }, + debugHelp: this._getHelpMessage("simulateEnterKeyboardInSearchModal"), + }; + }, + + mobileKanbanSearchMany2X(modalTitle, valueSearched) { + return [ + { + mobile: true, + trigger: `.o_control_panel_navigation .btn .fa-search`, + position: "bottom", + }, + { + mobile: true, + trigger: ".o_searchview_input", + extra_trigger: `.modal:not(.o_inactive_modal) .modal-title:contains('${modalTitle}')`, + position: "bottom", + run: `text ${valueSearched}`, + }, + this.simulateEnterKeyboardInSearchModal(), + { + mobile: true, + trigger: `.o_kanban_record .o_kanban_record_title :contains('${valueSearched}')`, + position: "bottom", + }, + ].map((step) => + this.addDebugHelp( + this._getHelpMessage("mobileKanbanSearchMany2X", modalTitle, valueSearched), + step + ) + ); + }, + /** + * Utility steps to save a form and wait for the save to complete + * + * @param {object} [options] + * @param {string} [options.content] + * @param {string} [options.extra_trigger] additional save-condition selector + */ + saveForm(options = {}) { + return [ + { + content: options.content || "save form", + trigger: ".o_form_button_save", + extra_trigger: options.extra_trigger, + run: "click", + auto: true, + }, + { + content: "wait for save completion", + trigger: ".o_form_readonly, .o_form_saved", + run() {}, + auto: true, + }, + ]; + }, + /** + * Utility steps to cancel a form creation or edition. + * + * Supports creation/edition from either a form or a list view (so checks + * for both states). + */ + discardForm(options = {}) { + return [ + { + content: options.content || "exit the form", + trigger: ".o_form_button_cancel", + extra_trigger: options.extra_trigger, + run: "click", + auto: true, + }, + { + content: "wait for cancellation to complete", + trigger: + ".o_view_controller.o_list_view, .o_form_view > div > div > .o_form_readonly, .o_form_view > div > div > .o_form_saved", + run() {}, + auto: true, + }, + ]; + }, +}; diff --git a/static/tests/debug_manager_tests.js b/static/tests/debug_manager_tests.js new file mode 100644 index 0000000..03e47c9 --- /dev/null +++ b/static/tests/debug_manager_tests.js @@ -0,0 +1,87 @@ +/** @odoo-module **/ + +import { disableTours } from "@web_tour/debug/debug_manager"; + +import { hotkeyService } from "@web/core/hotkeys/hotkey_service"; +import { ormService } from "@web/core/orm_service"; +import { registry } from "@web/core/registry"; +import { uiService } from "@web/core/ui/ui_service"; +import { browser } from "@web/core/browser/browser"; + +import { click, getFixture, mount, patchWithCleanup } from "@web/../tests/helpers/utils"; +import { makeTestEnv } from "@web/../tests/helpers/mock_env"; +import { makeFakeLocalizationService, fakeCommandService } from "@web/../tests/helpers/mock_services"; +import { DebugMenuParent } from "@web/../tests/core/debug/debug_manager_tests"; + +const debugRegistry = registry.category("debug"); +let target; + +QUnit.module("Tours", (hooks) => { + + QUnit.module("DebugManager"); + + hooks.beforeEach(async () => { + target = getFixture(); + registry + .category("services") + .add("hotkey", hotkeyService) + .add("ui", uiService) + .add("orm", ormService) + .add("localization", makeFakeLocalizationService()) + .add("command", fakeCommandService); + }); + + QUnit.test("can disable tours", async (assert) => { + debugRegistry.category("default").add("disableTours", disableTours); + + const fakeLocalStorage = { + tour__sampletour1__currentIndex: "0", + tour__sampletour1__stepDelay: "0", + tour__sampletour1__keepWatchBrowser: "0", + tour__sampletour1__showPointerDuration: "0", + tour__sampletour1__mode: "manual", + tour__sampletour2__currentIndex: "0", + tour__sampletour2__stepDelay: "0", + tour__sampletour2__keepWatchBrowser: "0", + tour__sampletour2__showPointerDuration: "0", + tour__sampletour2__mode: "manual", + }; + + Object.defineProperties(fakeLocalStorage, { + getItem: { + value(key) { + return fakeLocalStorage[key]; + }, + enumerable: false, + }, + removeItem: { + value(key) { + delete fakeLocalStorage[key]; + }, + enumerable: false, + }, + }); + + patchWithCleanup(browser, { localStorage: fakeLocalStorage }); + + const mockRPC = async (_route, args) => { + if (args.method === "check_access_rights") { + return Promise.resolve(true); + } + if (args.method === "consume") { + assert.step("consume"); + assert.deepEqual(args.args[0], ["sampletour1", "sampletour2"]); + return Promise.resolve(true); + } + }; + const env = await makeTestEnv({ mockRPC }); + + await mount(DebugMenuParent, target, { env }); + + await click(target.querySelector("button.dropdown-toggle")); + + assert.containsOnce(target, ".dropdown-item"); + await click(target.querySelector(".dropdown-item")); + assert.verifySteps(["consume"]); + }); +}); diff --git a/static/tests/tour_service_tests.js b/static/tests/tour_service_tests.js new file mode 100644 index 0000000..5f1c70d --- /dev/null +++ b/static/tests/tour_service_tests.js @@ -0,0 +1,742 @@ +/** @odoo-module **/ + +import { browser } from "@web/core/browser/browser"; +import { MacroEngine } from "@web/core/macro"; +import { registry } from "@web/core/registry"; +import { tourService } from "@web_tour/tour_service/tour_service"; +import { rpcService } from "@web/core/network/rpc_service"; +import { userService } from "@web/core/user_service"; +import { ormService } from "@web/core/orm_service"; +import { notificationService } from "@web/core/notifications/notification_service"; +import { effectService } from "@web/core/effects/effect_service"; +import { registerCleanup } from "@web/../tests/helpers/cleanup"; +import { + getFixture, + mount, + mockTimeout, + editInput, + click, + triggerEvent, + nextTick, + patchWithCleanup, +} from "@web/../tests/helpers/utils"; +import { makeTestEnv } from "@web/../tests/helpers/mock_env"; +import { Component, useState, xml } from "@odoo/owl"; +import { session } from "@web/session"; + +let target, mock; + +QUnit.module("Tour service", (hooks) => { + QUnit.module("tour_service"); + + let tourRegistry; + + class Counter extends Component { + static template = xml/*html*/ ` +
+
+ +
+
+ + +
+
+ `; + setup() { + this.state = useState({ interval: 1, value: 0 }); + } + onIncrement() { + this.state.value += this.state.interval; + } + } + + hooks.beforeEach(() => { + target = getFixture(); + mock = mockTimeout(); + tourRegistry = registry.category("web_tour.tours"); + delete registry.subRegistries["web_tour.tours"]; + let macroEngines = []; + patchWithCleanup(MacroEngine.prototype, { + start() { + super.start(...arguments); + macroEngines.push(this); + }, + }); + registerCleanup(() => { + macroEngines.forEach((e) => e.stop()); + macroEngines = []; + }); + registry + .category("services") + .add("rpc", rpcService) + .add("user", userService) + .add("orm", ormService) + .add("notification", notificationService) + .add("effect", effectService) + .add("tour_service", tourService); + patchWithCleanup(browser.console, { + // prevent form logging "tour successful" which would end the qunit suite test + log: () => {}, + }); + }); + + hooks.afterEach(() => { + registry.subRegistries["web_tour.tours"] = tourRegistry; + }); + + QUnit.test("Tours sequence", async function (assert) { + registry + .category("web_tour.tours") + .add("Tour 1", { + sequence: 10, + steps: () => [{ trigger: ".anchor" }], + }) + .add("Tour 2", { steps: () => [{ trigger: ".anchor" }] }) + .add("Tour 3", { + sequence: 5, + steps: () => [{ trigger: ".anchor", content: "Oui" }], + }); + const env = await makeTestEnv({}); + const sortedTours = env.services.tour_service.getSortedTours(); + assert.strictEqual(sortedTours[0].name, "Tour 3"); + }); + + QUnit.test("override existing tour by using saveAs", async function (assert) { + registry + .category("web_tour.tours") + .add("Tour 1", { + steps: () => [{ trigger: "#1" }], + saveAs: "homepage", + }) + .add("Tour 2", { + steps: () => [{ trigger: "#2" }], + saveAs: "homepage", + }); + const env = await makeTestEnv({}); + const sortedTours = env.services.tour_service.getSortedTours(); + assert.strictEqual(sortedTours.length, 1); + assert.deepEqual(sortedTours[0].steps, [{ shadow_dom: undefined, trigger: "#2" }]); + assert.deepEqual(sortedTours[0].name, "homepage"); + }); + + QUnit.test("points to next step", async function (assert) { + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [ + { + trigger: "button.inc", + }, + ], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + await mock.advanceTime(800); + assert.containsOnce(document.body, ".o_tour_pointer"); + await click(target, "button.inc"); + assert.containsNone(document.body, ".o_tour_pointer"); + assert.strictEqual(target.querySelector("span.value").textContent, "1"); + }); + + QUnit.test("next step with new anchor at same position", async (assert) => { + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [{ trigger: "button.foo" }, { trigger: "button.bar" }], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Dummy extends Component { + state = useState({ bool: true }); + static template = xml/*html*/ ` + + + `; + } + class Root extends Component { + static components = { OverlayContainer, Dummy }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + await mock.advanceTime(100); + assert.containsOnce(document.body, ".o_tour_pointer"); + + // check position of the pointer relative to the foo button + let pointerRect = document.body.querySelector(".o_tour_pointer").getBoundingClientRect(); + let buttonRect = document.body.querySelector("button.foo").getBoundingClientRect(); + const leftValue1 = pointerRect.left - buttonRect.left; + const bottomValue1 = pointerRect.bottom - buttonRect.bottom; + assert.ok(leftValue1 !== 0); + assert.ok(bottomValue1 !== 0); + + await click(target, "button.foo"); + await mock.advanceTime(100); + assert.containsOnce(document.body, ".o_tour_pointer"); + + // check position of the pointer relative to the bar button + pointerRect = document.body.querySelector(".o_tour_pointer").getBoundingClientRect(); + buttonRect = document.body.querySelector("button.bar").getBoundingClientRect(); + const leftValue2 = pointerRect.left - buttonRect.left; + const bottomValue2 = pointerRect.bottom - buttonRect.bottom; + assert.strictEqual(bottomValue1, bottomValue2); + assert.strictEqual(leftValue1, leftValue2); + }); + + QUnit.test("scroller pointer to reach next step", async function (assert) { + patchWithCleanup(Element.prototype, { + scrollIntoView(options) { + super.scrollIntoView({ ...options, behavior: "instant" }); + }, + }); + + // The fixture should be shown for this test + target.style.position = "fixed"; + target.style.top = "200px"; + target.style.left = "50px"; + + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [{ trigger: "button.inc", content: "Click to increment" }], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` +
+
+ + +
+
+ `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + await mock.advanceTime(100); // awaits the macro engine + + // Even if this seems weird, it should show the initial pointer. + // This is due to the fact the intersection observer has just been started and + // the pointer did not have the observations yet when the pointTo method was called. + // This is a bit tricky to change for now because the synchronism of the pointTo method + // is what permits to avoid multiple pointer to be shown at the same time + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal( + document.body.querySelector(".o_tour_pointer").textContent, + "Click to increment" + ); + + await mock.advanceTime(100); // awaits for the macro engine next check cycle + // now the scroller pointer should be shown + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal( + document.body.querySelector(".o_tour_pointer").textContent, + "Scroll down to reach the next step." + ); + + // awaiting the click here permits to the intersection observer to update + await click(document.body, ".o_tour_pointer"); + assert.containsNone(document.body, ".o_tour_pointer"); + await mock.advanceTime(100); // awaits for the macro engine next check cycle + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal( + document.body.querySelector(".o_tour_pointer").textContent, + "Click to increment" + ); + + document.querySelector(".scrollable-parent").scrollTop = 1000; + await nextTick(); // awaits the intersection observer to update after the scroll + await mock.advanceTime(100); // awaits for the macro engine next check cycle + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal( + document.body.querySelector(".o_tour_pointer").textContent, + "Scroll up to reach the next step." + ); + + // awaiting the click here permits to the intersection observer to update + await click(document.body, ".o_tour_pointer"); + assert.containsNone(document.body, ".o_tour_pointer"); + await mock.advanceTime(100); // awaits for the macro engine next check cycle + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal( + document.body.querySelector(".o_tour_pointer").textContent, + "Click to increment" + ); + }); + + QUnit.test("scrolling to next step should update the pointer's height", async (assert) => { + patchWithCleanup(Element.prototype, { + scrollIntoView(options) { + super.scrollIntoView({ ...options, behavior: "instant" }); + }, + }); + + // The fixture should be shown for this test + target.style.position = "fixed"; + target.style.top = "200px"; + target.style.left = "50px"; + + const stepContent = "Click this pretty button to increment this magnificent counter !"; + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [ + { + trigger: "button.inc", + content: stepContent, + }, + ], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` +
+ +
+
+ + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + await mock.advanceTime(100); // awaits the macro engine + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal(document.body.querySelector(".o_tour_pointer").textContent, stepContent); + + const pointer = document.body.querySelector(".o_tour_pointer"); + assert.doesNotHaveClass(pointer, "o_open"); + assert.strictEqual(pointer.style.height, "28px"); + assert.strictEqual(pointer.style.width, "28px"); + + await triggerEvent(document.body, ".o_tour_pointer", "mouseenter"); + await mock.advanceTime(100); // awaits for the macro engine next check cycle + assert.hasClass(pointer, "o_open"); + const firstOpenHeight = pointer.style.height; + const firstOpenWidth = pointer.style.width; + + await triggerEvent(document.body, ".o_tour_pointer", "mouseleave"); + await mock.advanceTime(100); // awaits for the macro engine next check cycle + assert.doesNotHaveClass(pointer, "o_open"); + + document.querySelector(".scrollable-parent").scrollTop = 1000; + await nextTick(); // awaits the intersection observer to update after the scroll + await mock.advanceTime(100); // awaits for the macro engine next check cycle + // now the scroller pointer should be shown + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal( + document.body.querySelector(".o_tour_pointer").textContent, + "Scroll up to reach the next step." + ); + + document.querySelector(".scrollable-parent").scrollTop = 0; + await nextTick(); // awaits the intersection observer to update after the scroll + await mock.advanceTime(100); // awaits for the macro engine next check cycle + // now the true step pointer should be shown again + assert.containsOnce(document.body, ".o_tour_pointer"); + assert.equal(document.body.querySelector(".o_tour_pointer").textContent, stepContent); + + await triggerEvent(document.body, ".o_tour_pointer", "mouseenter"); + await mock.advanceTime(100); // awaits for the macro engine next check cycle + assert.hasClass(pointer, "o_open"); + const secondOpenHeight = pointer.style.height; + const secondOpenWidth = pointer.style.width; + assert.strictEqual(firstOpenHeight, secondOpenHeight); + assert.strictEqual(firstOpenWidth, secondOpenWidth); + }); + + QUnit.test("perform edit on next step", async function (assert) { + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [ + { + trigger: ".interval input", + }, + { + trigger: "button.inc", + }, + ], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + await mock.advanceTime(750); + assert.containsOnce(document.body, ".o_tour_pointer"); + await editInput(target, ".interval input", "5"); + assert.containsNone(document.body, ".o_tour_pointer"); + await mock.advanceTime(750); + assert.containsOnce(document.body, ".o_tour_pointer"); + await click(target, "button.inc"); + assert.strictEqual(target.querySelector(".counter .value").textContent, "5"); + }); + + QUnit.test("trigger an event when a step is consummed", async function (assert) { + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [{ trigger: ".interval input" }], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + env.services.tour_service.bus.addEventListener("STEP-CONSUMMED", ({ detail }) => { + assert.step(`Tour ${detail.tour.name}, step ${detail.step.trigger}`); + }); + await mock.advanceTime(750); + await editInput(target, ".interval input", "5"); + await mock.advanceTime(750); + assert.verifySteps(["Tour tour1, step .interval input"]); + }); + + QUnit.test("should show only 1 pointer at a time", async function (assert) { + const storage = new Map(); + patchWithCleanup(browser.localStorage, { + getItem: (key) => storage.get(key), + setItem: (key, value) => storage.set(key, value), + removeItem: (key) => storage.delete(key), + tour__tour1__sequence: 0, + tour__tour2__sequence: 0, + }); + + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [ + { + trigger: ".interval input", + }, + ], + }); + registry.category("web_tour.tours").add("tour2", { + sequence: 10, + steps: () => [ + { + trigger: "button.inc", + }, + ], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + env.services.tour_service.startTour("tour2", { mode: "manual" }); + await mock.advanceTime(750); + assert.containsOnce(document.body, ".o_tour_pointer"); + await editInput(target, ".interval input", "5"); + assert.containsNone(document.body, ".o_tour_pointer"); + await mock.advanceTime(750); + assert.containsOnce(document.body, ".o_tour_pointer"); + }); + + QUnit.test("hovering to the anchor element should show the content", async function (assert) { + registry.category("web_tour.tours").add("tour1", { + sequence: 10, + steps: () => [ + { + content: "content", + trigger: "button.inc", + }, + ], + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + env.services.tour_service.startTour("tour1", { mode: "manual" }); + await mock.advanceTime(750); + assert.containsOnce(target, ".o_tour_pointer"); + triggerEvent(target, "button.inc", "mouseenter"); + await nextTick(); + assert.containsOnce(target, ".o_tour_pointer_content:not(.invisible)"); + assert.strictEqual( + target.querySelector(".o_tour_pointer_content:not(.invisible)").textContent, + "content" + ); + triggerEvent(target, "button.inc", "mouseleave"); + await nextTick(); + assert.containsOnce(target, ".o_tour_pointer_content.invisible"); + }); + + QUnit.test( + "registering non-test tour after service is started auto-starts the tour", + async function (assert) { + patchWithCleanup(session, { tour_disable: false }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + assert.containsNone(target, ".o_tour_pointer"); + registry.category("web_tour.tours").add("tour1", { + steps: () => [ + { + content: "content", + trigger: "button.inc", + }, + ], + }); + await mock.advanceTime(750); + await nextTick(); + assert.containsOnce(target, ".o_tour_pointer"); + } + ); + + QUnit.test( + "registering test tour after service is started doesn't auto-start the tour", + async function (assert) { + patchWithCleanup(session, { tour_disable: false }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer, Counter }; + static template = xml/*html*/ ` + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + assert.containsNone(target, ".o_tour_pointer"); + registry.category("web_tour.tours").add("tour1", { + test: true, + steps: () => [ + { + content: "content", + trigger: "button.inc", + }, + ], + }); + await mock.advanceTime(750); + await nextTick(); + assert.containsNone(target, ".o_tour_pointer"); + } + ); + + QUnit.test("a failing tour logs the step that failed", async function (assert) { + patchWithCleanup(browser.console, { + log: (s) => assert.step(`log: ${s}`), + warn: (s) => assert.step(`warn: ${s}`), + error: (s) => assert.step(`error: ${s}`), + }); + const env = await makeTestEnv({}); + + const { Component: OverlayContainer, props: overlayContainerProps } = registry + .category("main_components") + .get("OverlayContainer"); + + class Root extends Component { + static components = { OverlayContainer }; + static template = xml/*html*/ ` + + + + + + + + + + + + `; + } + + await mount(Root, target, { env, props: { overlayContainerProps } }); + registry.category("web_tour.tours").add("tour1", { + test: true, + steps: () => [ + { + content: "content", + trigger: ".button0", + }, + { + content: "content", + trigger: ".button1", + }, + { + content: "content", + trigger: ".button2", + }, + { + content: "content", + trigger: ".button3", + }, + { + content: "content", + trigger: ".wrong_selector", + }, + { + content: "content", + trigger: ".button4", + }, + { + content: "content", + trigger: ".button5", + }, + { + content: "content", + trigger: ".button6", + }, + { + content: "content", + trigger: ".button7", + }, + ], + }); + env.services.tour_service.startTour("tour1", { mode: "auto" }); + await mock.advanceTime(750); + assert.verifySteps(["log: Tour tour1 on step: 'content (trigger: .button0)'"]); + await mock.advanceTime(750); + assert.verifySteps(["log: Tour tour1 on step: 'content (trigger: .button1)'"]); + await mock.advanceTime(750); + assert.verifySteps(["log: Tour tour1 on step: 'content (trigger: .button2)'"]); + await mock.advanceTime(750); + assert.verifySteps(["log: Tour tour1 on step: 'content (trigger: .button3)'"]); + await mock.advanceTime(750); + assert.verifySteps(["log: Tour tour1 on step: 'content (trigger: .wrong_selector)'"]); + await mock.advanceTime(10000); + const expectedWarning = `warn: Tour tour1 failed at step content (trigger: .wrong_selector) + +{ + "content": "content", + "trigger": ".button1" +}, +{ + "content": "content", + "trigger": ".button2" +}, +{ + "content": "content", + "trigger": ".button3" +}, +----- FAILING STEP ----- +{ + "content": "content", + "trigger": ".wrong_selector" +}, +----------------------- +{ + "content": "content", + "trigger": ".button4" +}, +{ + "content": "content", + "trigger": ".button5" +}, +{ + "content": "content", + "trigger": ".button6" +},`; + const expectedError = "error: Tour tour1 failed at step content (trigger: .wrong_selector)"; + assert.verifySteps([expectedWarning, expectedError]); + }); +}); diff --git a/views/tour_views.xml b/views/tour_views.xml new file mode 100644 index 0000000..cba0cc1 --- /dev/null +++ b/views/tour_views.xml @@ -0,0 +1,46 @@ + + + + web_tour.tour + +
+ + + + + + + + + + +
+
+
+ + + web_tour.tour + + + + + + + + + tour.search + web_tour.tour + + + + + + + + Tours + web_tour.tour + + + + +